1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-22 15:24:46 -05:00

chore(workers): Test that closing a worker closes any child workers (#12215)

Before #12156, closing a worker which had children would cause a panic
(https://github.com/denoland/deno/issues/11342#issuecomment-918327693).

After that PR, closing a worker will also close any child workers.
This commit is contained in:
Andreu Botella 2021-09-25 04:26:57 +02:00 committed by GitHub
parent 4e2b59f9df
commit 1a6249c971
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 0 deletions

View file

@ -1194,6 +1194,11 @@ itest!(worker_drop_handle_race {
exit_code: 1,
});
itest!(worker_close_nested {
args: "run --quiet --reload --allow-read worker_close_nested.js",
output: "worker_close_nested.js.out",
});
itest!(worker_message_before_close {
args: "run --quiet --reload --allow-read worker_message_before_close.js",
output: "worker_message_before_close.js.out",

View file

@ -0,0 +1,20 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
// Test that closing a worker which has living child workers will automatically
// close the children.
console.log("Starting the main thread");
const worker = new Worker(
new URL("./workers/close_nested_parent.js", import.meta.url),
{ type: "module" },
);
setTimeout(() => {
console.log("About to close");
worker.postMessage({});
// Keep the process running for another two seconds, to make sure there's no
// output from the child worker.
setTimeout(() => {}, 2000);
}, 1000);

View file

@ -0,0 +1,5 @@
Starting the main thread
Starting the parent worker
Starting the child worker
About to close
Closing

View file

@ -0,0 +1,7 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
console.log("Starting the child worker");
setTimeout(() => {
console.log("The child worker survived the death of the parent!!!");
}, 2000);

View file

@ -0,0 +1,13 @@
// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
console.log("Starting the parent worker");
new Worker(
new URL("./close_nested_child.js", import.meta.url),
{ type: "module" },
);
self.addEventListener("message", () => {
console.log("Closing");
self.close();
});