summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2020-04-02 23:43:20 +0200
committerRichard Lau <rlau@redhat.com>2021-02-23 11:24:25 +0000
commit6cef0e3678345a12044519ed90faf9d943a89892 (patch)
treee1e73f5e4a1051c640376bb1f85ca9cd41a8b5af
parent0a35d49f56bdc789ade698595fa4fa09022a28f9 (diff)
downloadnode-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.cc2
-rw-r--r--test/parallel/test-worker-terminate-nested.js15
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()));