From 7d66d47dba9e6f93f4d270afc721276166cf4fa0 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Thu, 14 Feb 2019 23:40:41 +0100 Subject: [PATCH] vm: do not overwrite error when creating context An empty `Local<>` already indicates that an exception is pending, so there is no need to throw an exception. In the case of Workers, this could override a `.terminate()` call. PR-URL: https://github.com/nodejs/node/pull/26112 Reviewed-By: Colin Ihrig Reviewed-By: Gus Caplan Reviewed-By: James M Snell --- src/node_contextify.cc | 1 - .../test-worker-vm-context-terminate.js | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 test/parallel/test-worker-vm-context-terminate.js diff --git a/src/node_contextify.cc b/src/node_contextify.cc index 952acfe06f4b85..343342408b1a75 100644 --- a/src/node_contextify.cc +++ b/src/node_contextify.cc @@ -171,7 +171,6 @@ MaybeLocal ContextifyContext::CreateV8Context( Local ctx = NewContext(env->isolate(), object_template); if (ctx.IsEmpty()) { - env->ThrowError("Could not instantiate context"); return MaybeLocal(); } diff --git a/test/parallel/test-worker-vm-context-terminate.js b/test/parallel/test-worker-vm-context-terminate.js new file mode 100644 index 00000000000000..23b58ba4db14d5 --- /dev/null +++ b/test/parallel/test-worker-vm-context-terminate.js @@ -0,0 +1,19 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const vm = require('vm'); +const { Worker } = require('worker_threads'); + +// Do not use isMainThread so that this test itself can be run inside a Worker. +if (!process.env.HAS_STARTED_WORKER) { + process.env.HAS_STARTED_WORKER = 1; + const w = new Worker(__filename); + w.on('online', common.mustCall(() => { + setTimeout(() => w.terminate(), 50); + })); + w.on('error', common.mustNotCall()); + w.on('exit', common.mustCall((code) => assert.strictEqual(code, 1))); +} else { + while (true) + vm.runInNewContext(''); +}