From 54c61fb288212f4acee2baa54e35b1ee42a7dce9 Mon Sep 17 00:00:00 2001 From: Sean McArthur <sean.monstar@gmail.com> Date: Tue, 24 Jul 2012 11:15:52 -0700 Subject: [PATCH] detect if signals can be used and set ENV variable --- lib/shutdown.js | 4 +--- scripts/run_locally.js | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/shutdown.js b/lib/shutdown.js index 26ef5af42..24a18711e 100644 --- a/lib/shutdown.js +++ b/lib/shutdown.js @@ -75,9 +75,7 @@ exports.handleTerminationSignals = function(app, callback) { }; } - try { + if (!process.env.NO_SIGNALS) { process.on('SIGINT', endIt('INT')).on('SIGTERM', endIt('TERM')).on('SIGQUIT', endIt('QUIT')); - } catch (noSignals) { - // Window doesn't support signals } }; diff --git a/scripts/run_locally.js b/scripts/run_locally.js index 064212819..d602f22fd 100755 --- a/scripts/run_locally.js +++ b/scripts/run_locally.js @@ -78,6 +78,21 @@ if (config.get('env').substr(0,5) === 'test_') { } } +// Windows can't use signals, so lets figure out if we should use them +// To force signals, NO_SIGNALS=true. +// Otherwise, they will be feature-detected. +var SIGNALS_PROP = 'NO_SIGNALS'; +if (!(SINGALS_PROP in process.env)) { + try { + function signals_test() {} + process.on('SIGINT', signals_test); + process.removeListener('SIGINT', signals_test); + process.env[SIGNALS_PROP] = false; + } catch (noSignals) { + process.env[SIGNALS_PROP] = true; + } +} + function runDaemon(daemon, cb) { Object.keys(daemonsToRun[daemon]).forEach(function(ek) { if (ek === 'path') return; // this blows away the Window PATH @@ -135,11 +150,9 @@ daemonNames.forEach(function(dn) { }); }); -try { +if (!process.env[SIGNALS_PROP]) { process.on('SIGINT', function () { console.log('\nSIGINT recieved! trying to shut down gracefully...'); Object.keys(daemons).forEach(function (k) { daemons[k].kill('SIGINT'); }); }); -} catch (noSignals) { - // Windows doesn't have signal support, so node explodes } -- GitLab