summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/parallel/test-worker-cleanexit-with-js.js21
1 files changed, 21 insertions, 0 deletions
diff --git a/test/parallel/test-worker-cleanexit-with-js.js b/test/parallel/test-worker-cleanexit-with-js.js
new file mode 100644
index 0000000000..737399b113
--- /dev/null
+++ b/test/parallel/test-worker-cleanexit-with-js.js
@@ -0,0 +1,21 @@
+'use strict';
+const common = require('../common');
+
+// Harden the thread interactions on the exit path.
+// Ensure workers are able to bail out safe at
+// arbitrary execution points. By running a lot of
+// JS code in a tight loop, the expectation
+// is that those will be at various control flow points
+// preferrably in the JS land.
+
+const { Worker } = require('worker_threads');
+const code = 'setInterval(() => {' +
+ "require('v8').deserialize(require('v8').serialize({ foo: 'bar' }));" +
+ "require('vm').runInThisContext('x = \"foo\";');" +
+ "eval('const y = \"vm\";');}, 10);";
+for (let i = 0; i < 9; i++) {
+ new Worker(code, { eval: true });
+}
+new Worker(code, { eval: true }).on('online', common.mustCall((msg) => {
+ process.exit(0);
+}));