From 921f2de6cf999b5a4663615e37967b4269d755fe Mon Sep 17 00:00:00 2001 From: Evan Lucas Date: Wed, 16 Sep 2015 12:44:28 -0500 Subject: [PATCH] src: honor --abort_on_uncaught_exception flag Fix regression introduced in 0af4c9ea7434e4f505dbe071357e4bc3b4ab2a8a that ignores the --abort-on-uncaught-exception flag. Prior to that commit, the flag was passed through to v8. After that commit, the process just calls exit(1). PR-URL: https://github.com/nodejs/node/pull/2776 Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Colin Ihrig Reviewed-By: Brian White Reviewed-by: Trevor Norris --- src/node.cc | 6 +++- test/abort/test-abort-uncaught-exception.js | 31 +++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 test/abort/test-abort-uncaught-exception.js diff --git a/src/node.cc b/src/node.cc index c139c509a2..1e63009e3b 100644 --- a/src/node.cc +++ b/src/node.cc @@ -2180,7 +2180,11 @@ void FatalException(Isolate* isolate, if (false == caught->BooleanValue()) { ReportException(env, error, message); - exit(1); + if (abort_on_uncaught_exception) { + ABORT(); + } else { + exit(1); + } } } diff --git a/test/abort/test-abort-uncaught-exception.js b/test/abort/test-abort-uncaught-exception.js new file mode 100644 index 0000000000..0d9fa6884d --- /dev/null +++ b/test/abort/test-abort-uncaught-exception.js @@ -0,0 +1,31 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const spawn = require('child_process').spawn; +const node = process.execPath; + +if (process.argv[2] === 'child') { + throw new Error('child error'); +} else { + run('', null); + run('--abort-on-uncaught-exception', 'SIGABRT'); +} + +function run(flags, signal) { + const args = [__filename, 'child']; + if (flags) + args.unshift(flags); + + const child = spawn(node, args); + child.on('exit', common.mustCall(function(code, sig) { + if (!common.isWindows) { + assert.strictEqual(sig, signal); + } else { + if (signal) + assert.strictEqual(code, 3); + else + assert.strictEqual(code, 1); + } + })); +}