// META: global=window,worker // META: script=/common/gc.js 'use strict'; // See https://crbug.com/335506658 for details. promise_test(async () => { const closed = new ReadableStream({ pull(controller) { controller.enqueue('is there anybody in there?'); } }).getReader().closed; // 3 GCs are actually required to trigger the bug at time of writing. for (let i = 0; i < 5; ++i) await garbageCollect(); }, 'Garbage-collecting a stream along with its reader should not crash'); promise_test(async () => { let reader = new ReadableStream({ pull() { } }).getReader(); const promise = reader.read(); reader = null; for (let i = 0; i < 5; ++i) await garbageCollect(); }, 'Garbage-collecting a stream with a pending read should not crash'); promise_test(async () => { let reader = new ReadableStream({ type: "bytes", pull() { return new Promise(resolve => {}); } }).getReader({mode: "byob"}); const promise = reader.read(new Uint8Array(42)); reader = null; for (let i = 0; i < 5; ++i) await garbageCollect(); }, 'Garbage-collecting a stream with a pending BYOB read should not crash');