From 760d64bc6b200ae58e8ee948903bf1e42b6799b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Tue, 16 Apr 2024 19:41:03 +0100 Subject: fix(ext/node): worker_threads.receiveMessageOnPort doesn't panic (#23406) Follow up to https://github.com/denoland/deno/pull/23386. Instead of using async `recv()` method, it was replaced with a poll based function that doesn't hold onto RefCell borrow across await point. Fixes https://github.com/denoland/deno/issues/23362 --- tests/unit_node/worker_threads_test.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'tests/unit_node/worker_threads_test.ts') diff --git a/tests/unit_node/worker_threads_test.ts b/tests/unit_node/worker_threads_test.ts index bd600469b..21bbca194 100644 --- a/tests/unit_node/worker_threads_test.ts +++ b/tests/unit_node/worker_threads_test.ts @@ -418,21 +418,45 @@ Deno.test({ // Regression test for https://github.com/denoland/deno/issues/23362 Deno.test("[node/worker_threads] receiveMessageOnPort works if there's pending read", function () { const { port1, port2 } = new workerThreads.MessageChannel(); + const { port1: port3, port2: port4 } = new workerThreads.MessageChannel(); + const { port1: port5, port2: port6 } = new workerThreads.MessageChannel(); const message1 = { hello: "world" }; const message2 = { foo: "bar" }; assertEquals(workerThreads.receiveMessageOnPort(port2), undefined); port2.start(); + port4.start(); + port6.start(); port1.postMessage(message1); port1.postMessage(message2); + port3.postMessage(message1); + port3.postMessage(message2); + port5.postMessage(message1); + port5.postMessage(message2); assertEquals(workerThreads.receiveMessageOnPort(port2), { message: message1, }); assertEquals(workerThreads.receiveMessageOnPort(port2), { message: message2, }); + assertEquals(workerThreads.receiveMessageOnPort(port4), { + message: message1, + }); + assertEquals(workerThreads.receiveMessageOnPort(port4), { + message: message2, + }); + assertEquals(workerThreads.receiveMessageOnPort(port6), { + message: message1, + }); + assertEquals(workerThreads.receiveMessageOnPort(port6), { + message: message2, + }); port1.close(); port2.close(); + port3.close(); + port4.close(); + port5.close(); + port6.close(); }); -- cgit v1.2.3