Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
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.
  • Loading branch information
addaleax committed Feb 14, 2019
commit b3ac28c467ab0da367035975d6df3c86f10b0ab0
1 change: 0 additions & 1 deletion src/node_contextify.cc
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,6 @@ MaybeLocal<Context> ContextifyContext::CreateV8Context(
Local<Context> ctx = NewContext(env->isolate(), object_template);

if (ctx.IsEmpty()) {
env->ThrowError("Could not instantiate context");
return MaybeLocal<Context>();
}

Expand Down
17 changes: 17 additions & 0 deletions test/parallel/test-worker-vm-context-terminate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
'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);
setTimeout(() => w.terminate(), 50);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is using the 'online' event here instead an option?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cjihrig I’ve added that but kept the timeout, it still seems to make this fail more reliably locally (with the node master executable).

w.on('error', common.mustNotCall());
w.on('exit', common.mustCall((code) => assert.strictEqual(code, 1)));
} else {
while (true)
vm.runInNewContext('');
}