diff --git a/lib/internal/async_hooks.js b/lib/internal/async_hooks.js index d382fe36e1847f..165d44b7022289 100644 --- a/lib/internal/async_hooks.js +++ b/lib/internal/async_hooks.js @@ -4,6 +4,11 @@ const { ERR_ASYNC_TYPE, ERR_INVALID_ASYNC_ID } = require('internal/errors').codes; + +const { getOptionValue } = require('internal/options'); +const shouldAbortOnUncaughtException = + getOptionValue('--abort-on-uncaught-exception'); + const async_wrap = internalBinding('async_wrap'); /* async_hook_fields is a Uint32Array wrapping the uint32_t array of * Environment::AsyncHooks::fields_[]. Each index tracks the number of active @@ -107,7 +112,7 @@ function fatalError(e) { Error.captureStackTrace(o, fatalError); process._rawDebug(o.stack); } - if (internalBinding('config').shouldAbortOnUncaughtException) { + if (shouldAbortOnUncaughtException) { process.abort(); } process.exit(1); diff --git a/lib/internal/policy/manifest.js b/lib/internal/policy/manifest.js index f6adca125bdcb4..6c777a7c78b9c6 100644 --- a/lib/internal/policy/manifest.js +++ b/lib/internal/policy/manifest.js @@ -25,7 +25,9 @@ const { entries } = Object; const kIntegrities = new SafeWeakMap(); const kReactions = new SafeWeakMap(); const kRelativeURLStringPattern = /^\.{0,2}\//; -const { shouldAbortOnUncaughtException } = internalBinding('config'); +const { getOptionValue } = require('internal/options'); +const shouldAbortOnUncaughtException = + getOptionValue('--abort-on-uncaught-exception'); const { abort, exit, _rawDebug } = process; function REACTION_THROW(error) { diff --git a/src/node_config.cc b/src/node_config.cc index 56672308d1bc1e..d9b2c8112eb689 100644 --- a/src/node_config.cc +++ b/src/node_config.cc @@ -69,9 +69,6 @@ static void Initialize(Local target, READONLY_FALSE_PROPERTY(target, "hasInspector"); #endif - if (env->abort_on_uncaught_exception()) - READONLY_TRUE_PROPERTY(target, "shouldAbortOnUncaughtException"); - READONLY_PROPERTY(target, "bits", Number::New(env->isolate(), 8 * sizeof(intptr_t))); diff --git a/src/node_options.cc b/src/node_options.cc index 86a986521c54b2..20caac5c3720d9 100644 --- a/src/node_options.cc +++ b/src/node_options.cc @@ -540,7 +540,14 @@ void GetOptions(const FunctionCallbackInfo& args) { switch (option_info.type) { case kNoOp: case kV8Option: - value = Undefined(isolate); + // Special case for --abort-on-uncaught-exception which is also + // respected by Node.js internals + if (item.first == "--abort-on-uncaught-exception") { + value = Boolean::New( + isolate, original_per_env->abort_on_uncaught_exception); + } else { + value = Undefined(isolate); + } break; case kBoolean: value = Boolean::New(isolate, *parser.Lookup(field, opts));