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: #25655
Fixes: #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 authored and addaleax committed Jan 23, 2019
1 parent 55768c0 commit b2834ce
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

This comment has been minimized.

Copy link
@bcoe

bcoe Jan 23, 2019

Author Contributor

@addaleax thank you for porting this, gives me a clearer picture of how this process works too; just pull against v11.x-staging.

// 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 b2834ce

Please sign in to comment.