summaryrefslogtreecommitdiff
path: root/tests/unit_node/worker_threads_test.ts
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2024-04-16 19:41:03 +0100
committerGitHub <noreply@github.com>2024-04-16 18:41:03 +0000
commit760d64bc6b200ae58e8ee948903bf1e42b6799b5 (patch)
treeb92428b98e639228c847a01fcff6e2d3f036e413 /tests/unit_node/worker_threads_test.ts
parent534dd34f8662691c1e29cc1a6b84f18d311fe0c9 (diff)
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
Diffstat (limited to 'tests/unit_node/worker_threads_test.ts')
-rw-r--r--tests/unit_node/worker_threads_test.ts24
1 files changed, 24 insertions, 0 deletions
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();
});