Skip to content

Commit

Permalink
lib: honor setUncaughtExceptionCaptureCallback
Browse files Browse the repository at this point in the history
This api does not alter the behavior of diagnostic
report configured on uncaught exceptions.
This is deemed as a bug. Honor this API.

Refs: #35588
PR-URL: #35595
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: Colin Ihrig <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
Reviewed-By: Richard Lau <[email protected]>
  • Loading branch information
gireeshpunathil committed Oct 15, 2020
1 parent 4079bfd commit ddff2b2
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 1 deletion.
9 changes: 8 additions & 1 deletion lib/internal/process/execution.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,16 @@ function evalScript(name, body, breakFirstLine, print) {
globalThis.module = origModule;
}

const exceptionHandlerState = { captureFn: null };
const exceptionHandlerState = {
captureFn: null,
reportFlag: false
};

function setUncaughtExceptionCaptureCallback(fn) {
if (fn === null) {
exceptionHandlerState.captureFn = fn;
shouldAbortOnUncaughtToggle[0] = 1;
process.report.reportOnUncaughtException = exceptionHandlerState.reportFlag;
return;
}
if (typeof fn !== 'function') {
Expand All @@ -108,6 +112,9 @@ function setUncaughtExceptionCaptureCallback(fn) {
}
exceptionHandlerState.captureFn = fn;
shouldAbortOnUncaughtToggle[0] = 0;
exceptionHandlerState.reportFlag =
process.report.reportOnUncaughtException === true;
process.report.reportOnUncaughtException = false;
}

function hasUncaughtExceptionCaptureCallback() {
Expand Down
26 changes: 26 additions & 0 deletions test/report/test-report-uncaught-exception-override.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Flags: --report-uncaught-exception
'use strict';
// Test report is suppressed on uncaught exception hook.
const common = require('../common');
const assert = require('assert');
const helper = require('../common/report');
const tmpdir = require('../common/tmpdir');
const error = new Error('test error');

tmpdir.refresh();
process.report.directory = tmpdir.path;

// First, install an uncaught exception hook.
process.setUncaughtExceptionCaptureCallback(common.mustCall());

// Make sure this is ignored due to the above override.
process.on('uncaughtException', common.mustNotCall());

process.on('exit', (code) => {
assert.strictEqual(code, 0);
// Make sure no reports are generated.
const reports = helper.findReports(process.pid, tmpdir.path);
assert.strictEqual(reports.length, 0);
});

throw error;

0 comments on commit ddff2b2

Please sign in to comment.