diff --git a/cli/tests/unit/broadcast_channel_test.ts b/cli/tests/unit/broadcast_channel_test.ts index 06821c4dba..b13a475748 100644 --- a/cli/tests/unit/broadcast_channel_test.ts +++ b/cli/tests/unit/broadcast_channel_test.ts @@ -2,7 +2,7 @@ import { assertEquals } from "../../../test_util/std/testing/asserts.ts"; import { deferred } from "../../../test_util/std/async/deferred.ts"; -Deno.test("broadcastchannel worker", async () => { +Deno.test("BroadcastChannel worker", async () => { const intercom = new BroadcastChannel("intercom"); let count = 0; @@ -27,3 +27,9 @@ Deno.test("broadcastchannel worker", async () => { await promise; }); + +Deno.test("BroadcastChannel immediate close after post", () => { + const bc = new BroadcastChannel("internal_notification"); + bc.postMessage("New listening connected!"); + bc.close(); +}); diff --git a/ext/broadcast_channel/01_broadcast_channel.js b/ext/broadcast_channel/01_broadcast_channel.js index cf3b17ac59..59c6b7cef3 100644 --- a/ext/broadcast_channel/01_broadcast_channel.js +++ b/ext/broadcast_channel/01_broadcast_channel.js @@ -122,7 +122,11 @@ dispatch(this, this[_name], new Uint8Array(data)); // Send to listeners in other VMs. - defer(() => core.opAsync("op_broadcast_send", rid, this[_name], data)); + defer(() => { + if (!this[_closed]) { + core.opAsync("op_broadcast_send", rid, this[_name], data); + } + }); } close() {