From b60e3abe624a690687de9ae1fa86d34e79909800 Mon Sep 17 00:00:00 2001 From: isaacs Date: Tue, 27 Oct 2020 16:06:22 -0700 Subject: [PATCH] do not set process.exitCode based on child exit The child process's exit code should be ignored for the purpose of the signal manager, and is not emitted by node's child_process.spawn in the same way that @npmcli/promise-spawn returns it. Fix: #11 --- lib/signal-manager.js | 3 +-- test/signal-manager.js | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/signal-manager.js b/lib/signal-manager.js index 30627e5..556e758 100644 --- a/lib/signal-manager.js +++ b/lib/signal-manager.js @@ -33,8 +33,7 @@ const add = proc => { if (!handlersInstalled) setupListeners() - proc.once('exit', ({ code }) => { - process.exitCode = process.exitCode || code + proc.once('exit', () => { runningProcs.delete(proc) cleanupListeners() }) diff --git a/test/signal-manager.js b/test/signal-manager.js index 2474e51..9c6425d 100644 --- a/test/signal-manager.js +++ b/test/signal-manager.js @@ -22,13 +22,13 @@ test('adds only one handler for each signal, removes handlers when children have t.equal(handlers.length, 1, 'only has one handler') } - procOne.emit('exit', { code: 0 }) + procOne.emit('exit', 0) for (const signal of signalManager.forwardedSignals) { t.equal(process.listeners(signal).includes(signalManager.handleSignal), true, 'did not remove listeners yet') } - procTwo.emit('exit', { code: 0 }) + procTwo.emit('exit', 0) for (const signal of signalManager.forwardedSignals) { t.equal(process.listeners(signal).includes(signalManager.handleSignal), false, 'listener has been removed') @@ -41,7 +41,7 @@ test('forwards signals to child process', t => { const proc = new EventEmitter() proc.kill = (signal) => { t.equal(signal, signalManager.forwardedSignals[0], 'child receives correct signal') - proc.emit('exit', { code: 0 }) + proc.emit('exit', 0) for (const signal of signalManager.forwardedSignals) { t.equal(process.listeners(signal).includes(signalManager.handleSignal), false, 'listener has been removed') }