diff options
author | Anna Henningsen <anna@addaleax.net> | 2020-04-02 23:43:20 +0200 |
---|---|---|
committer | Richard Lau <rlau@redhat.com> | 2021-02-23 11:24:25 +0000 |
commit | 6cef0e3678345a12044519ed90faf9d943a89892 (patch) | |
tree | e1e73f5e4a1051c640376bb1f85ca9cd41a8b5af | |
parent | 0a35d49f56bdc789ade698595fa4fa09022a28f9 (diff) | |
download | node-new-6cef0e3678345a12044519ed90faf9d943a89892.tar.gz |
src,test: add regression test for nested Worker termination
This adds a regression test for terminating a Worker inside which
another Worker is running.
PR-URL: https://github.com/nodejs/node/pull/32623
Refs: https://github.com/nodejs/node/pull/32531
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
-rw-r--r-- | src/env.cc | 2 | ||||
-rw-r--r-- | test/parallel/test-worker-terminate-nested.js | 15 |
2 files changed, 17 insertions, 0 deletions
diff --git a/src/env.cc b/src/env.cc index 7e177e3b86..295b68741d 100644 --- a/src/env.cc +++ b/src/env.cc @@ -1038,6 +1038,8 @@ void Environment::Exit(int exit_code) { } void Environment::stop_sub_worker_contexts() { + DCHECK_EQ(Isolate::GetCurrent(), isolate()); + while (!sub_worker_contexts_.empty()) { Worker* w = *sub_worker_contexts_.begin(); remove_sub_worker_context(w); diff --git a/test/parallel/test-worker-terminate-nested.js b/test/parallel/test-worker-terminate-nested.js new file mode 100644 index 0000000000..3924528cea --- /dev/null +++ b/test/parallel/test-worker-terminate-nested.js @@ -0,0 +1,15 @@ +'use strict'; +const common = require('../common'); +const { Worker } = require('worker_threads'); + +// Check that a Worker that's running another Worker can be terminated. + +const worker = new Worker(` +const { Worker, parentPort } = require('worker_threads'); +const worker = new Worker('setInterval(() => {}, 10);', { eval: true }); +worker.on('online', () => { + parentPort.postMessage({}); +}); +`, { eval: true }); + +worker.on('message', common.mustCall(() => worker.terminate())); |