Skip to content

Commit

Permalink
process: fix call process.reallyExit, vs., binding
Browse files Browse the repository at this point in the history
Some user-land modules, e.g., nyc, mocha, currently rely on patching
process.reallyExit.

PR-URL: nodejs#25655
Fixes: nodejs#25650
Reviewed-By: Gus Caplan <[email protected]>
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
Reviewed-By: Ruben Bridgewater <[email protected]>
Reviewed-By: Colin Ihrig <[email protected]>
  • Loading branch information
bcoe committed Jan 23, 2019
1 parent a8d763a commit a6286e6
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
5 changes: 4 additions & 1 deletion lib/internal/process/per_thread.js
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,10 @@ function wrapProcessMethods(binding) {
process._exiting = true;
process.emit('exit', process.exitCode || 0);
}
binding.reallyExit(process.exitCode || 0);
// FIXME(joyeecheung): This is an undocumented API that gets monkey-patched
// in the user land. Either document it, or deprecate it in favor of a
// better public alternative.
process.reallyExit(process.exitCode || 0);
}

function kill(pid, sig) {
Expand Down
17 changes: 17 additions & 0 deletions test/parallel/test-process-really-exit.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
'use strict';
require('../common');
const assert = require('assert');

// ensure that the reallyExit hook is executed.
// see: https://github.com/nodejs/node/issues/25650
if (process.argv[2] === 'subprocess') {
process.reallyExit = function() {
console.info('really exited');
};
process.exit();
} else {
const { spawnSync } = require('child_process');
const out = spawnSync(process.execPath, [__filename, 'subprocess']);
const observed = out.output[1].toString('utf8').trim();
assert.strictEqual(observed, 'really exited');
}

0 comments on commit a6286e6

Please sign in to comment.