summaryrefslogtreecommitdiff
path: root/lib/internal
diff options
context:
space:
mode:
authorYael Hermon <yaelhe@wix.com>2019-01-04 20:02:25 +0200
committerDaniel Bevenius <daniel.bevenius@gmail.com>2019-01-18 05:39:58 +0100
commit01cd21973b26a2cbacbe143c5983cb4adf8e7681 (patch)
tree16d2712ba9e73dfdb9612acbcde6e0bd8423e097 /lib/internal
parent74562356db6964f8057ef4bd897725793e55d513 (diff)
downloadandroid-node-v8-01cd21973b26a2cbacbe143c5983cb4adf8e7681.tar.gz
android-node-v8-01cd21973b26a2cbacbe143c5983cb4adf8e7681.tar.bz2
android-node-v8-01cd21973b26a2cbacbe143c5983cb4adf8e7681.zip
worker: enable passing command line flags
This PR adds the ability to provide Workers with their own execArgv flags in replacement of the main thread's execArgv. Only per-Isolate/per-Environment options are allowed. Per-Process options and V8 flags are not allowed. Passing an empty execArgv array will reset per-Isolate and per-Environment options of the Worker to their defaults. If execArgv option is not passed, the Worker will get the same flags as the main thread. Usage example: ``` const worker = new Worker(__filename, { execArgv: ['--trace-warnings'], }); ``` PR-URL: https://github.com/nodejs/node/pull/25467 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Diffstat (limited to 'lib/internal')
-rw-r--r--lib/internal/errors.js3
-rw-r--r--lib/internal/worker.js13
2 files changed, 14 insertions, 2 deletions
diff --git a/lib/internal/errors.js b/lib/internal/errors.js
index 12b01ffb9b..b33cd27109 100644
--- a/lib/internal/errors.js
+++ b/lib/internal/errors.js
@@ -992,6 +992,9 @@ E('ERR_VM_MODULE_NOT_LINKED',
E('ERR_VM_MODULE_NOT_MODULE',
'Provided module is not an instance of Module', Error);
E('ERR_VM_MODULE_STATUS', 'Module status %s', Error);
+E('ERR_WORKER_INVALID_EXEC_ARGV', (errors) =>
+ `Initiated Worker with invalid execArgv flags: ${errors.join(', ')}`,
+ Error);
E('ERR_WORKER_PATH',
'The worker script filename must be an absolute path or a relative ' +
'path starting with \'./\' or \'../\'. Received "%s"',
diff --git a/lib/internal/worker.js b/lib/internal/worker.js
index 2e1568a738..e20a37af8a 100644
--- a/lib/internal/worker.js
+++ b/lib/internal/worker.js
@@ -8,6 +8,8 @@ const {
ERR_WORKER_PATH,
ERR_WORKER_UNSERIALIZABLE_ERROR,
ERR_WORKER_UNSUPPORTED_EXTENSION,
+ ERR_WORKER_INVALID_EXEC_ARGV,
+ ERR_INVALID_ARG_TYPE,
} = require('internal/errors').codes;
const { validateString } = require('internal/validators');
@@ -49,7 +51,11 @@ class Worker extends EventEmitter {
super();
debug(`[${threadId}] create new worker`, filename, options);
validateString(filename, 'filename');
-
+ if (options.execArgv && !Array.isArray(options.execArgv)) {
+ throw new ERR_INVALID_ARG_TYPE('options.execArgv',
+ 'array',
+ options.execArgv);
+ }
if (!options.eval) {
if (!path.isAbsolute(filename) &&
!filename.startsWith('./') &&
@@ -68,7 +74,10 @@ class Worker extends EventEmitter {
const url = options.eval ? null : pathToFileURL(filename);
// Set up the C++ handle for the worker, as well as some internal wiring.
- this[kHandle] = new WorkerImpl(url);
+ this[kHandle] = new WorkerImpl(url, options.execArgv);
+ if (this[kHandle].invalidExecArgv) {
+ throw new ERR_WORKER_INVALID_EXEC_ARGV(this[kHandle].invalidExecArgv);
+ }
this[kHandle].onexit = (code) => this[kOnExit](code);
this[kPort] = this[kHandle].messagePort;
this[kPort].on('message', (data) => this[kOnMessage](data));