diff --git a/src/node.js b/src/node.js index e95a01fb492..7dce99eb797 100644 --- a/src/node.js +++ b/src/node.js @@ -767,6 +767,8 @@ var addListener = process.addListener; var removeListener = process.removeListener; + process.on('removeListener', function() {}); + function isSignal(event) { return event.slice(0, 3) === 'SIG' && startup.lazyConstants().hasOwnProperty(event); diff --git a/test/simple/process-remove-all-signal-listeners.js b/test/simple/process-remove-all-signal-listeners.js new file mode 100644 index 00000000000..23aa22decfc --- /dev/null +++ b/test/simple/process-remove-all-signal-listeners.js @@ -0,0 +1,41 @@ +if (process.platform === 'win32') { + // Win32 doesn't have signals, just a kindof emulation, insufficient + // for this test to apply. + return; +} + +var assert = require('assert'); +var spawn = require('child_process').spawn; +var ok; + +if (!process.env.DOTEST) { + // We are the master, fork a child so we can verify it exits with correct + // status. + process.env.DOTEST = 'y'; + var child = spawn(process.execPath, [__filename]); + + child.once('exit', function(code, signal) { + assert.equal(signal, 'SIGINT'); + ok = true; + }); + + process.on('exit', function(code) { + if (code === 0) + assert(ok); + }); + + return; +} + +process.on('SIGINT', function() { + // Remove all handlers and kill ourselves. We should terminate by SIGINT + // now that we have no handlers. + process.removeAllListeners('SIGINT'); + process.kill(process.pid, 'SIGINT'); +}); + +// Signal handlers aren't sufficient to keep node alive, so resume stdin +process.stdin.resume(); + +// Demonstrate that signals are being handled +process.kill(process.pid, 'SIGINT');