// module.require("events");
// Signal Handlers
+(function() {
+ var signalWatchers = {};
+ addListener = process.addListener,
+ removeListener = process.removeListener;
+
+ function isSignal (event) {
+ return event.slice(0, 3) === 'SIG' && process.hasOwnProperty(event);
+ };
+
+ // Wrap addListener for the special signal types
+ process.addListener = function (type, listener) {
+ var ret = addListener.apply(this, arguments);
+ if (isSignal(type)) {
+ if (!signalWatchers.hasOwnProperty(type)) {
+ var b = process.binding('signal_watcher'),
+ w = new b.SignalWatcher(process[type]);
+ w.callback = function () {
+ process.emit(type);
+ }
+ signalWatchers[type] = w;
+ w.start();
+ } else if (this.listeners(type).length === 1) {
+ signalWatchers[event].start();
+ }
+ }
+
+ return ret;
+ }
-function isSignal (event) {
- return event.slice(0, 3) === 'SIG' && process.hasOwnProperty(event);
-};
+ process.removeListener = function (type, listener) {
+ var ret = removeListener.apply(this, arguments);
+ if (isSignal(type)) {
+ process.assert(signalWatchers.hasOwnProperty(type));
-process.addListener("newListener", function (event) {
- if (isSignal(event) && process.listeners(event).length === 0) {
- var b = process.binding('signal_watcher');
- var w = new b.SignalWatcher(process[event]);
- w.callback = function () {
- process.emit(event);
- };
- w.start();
+ if (this.listeners(type).length === 0) {
+ signalWatchers[type].stop();
+ }
+ }
+
+ return ret;
}
-});
+})();
// Timers
function addTimerListener (callback) {