From 577157b7e3efa15ac96a93594d56bb240eccb03d Mon Sep 17 00:00:00 2001 From: jialiya Date: Tue, 14 Oct 2014 19:02:17 -0700 Subject: [PATCH] remove all listeners after error emitting --- src/colony/modules/net.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/colony/modules/net.js b/src/colony/modules/net.js index 7a3664ee..836c3013 100644 --- a/src/colony/modules/net.js +++ b/src/colony/modules/net.js @@ -468,7 +468,7 @@ TCPSocket.prototype.__close = function (tryToClose) { process.removeListener('tcp-close', this._closehandler); var retries = 0; - function closeSocket(){ + function closeSocket(cb){ if (self.socket === null) return; var ret = tm.tcp_close(self.socket); if (ret < 0 && ret != -tm.ENOTCONN) { // -57 is inactive, socket has already been closed @@ -476,21 +476,30 @@ TCPSocket.prototype.__close = function (tryToClose) { // tried 3 times and couldn't close, error out self.emit('close'); self.emit('error', new Error('ENOENT Cannot close socket ' + self.socket + ' Got: err'+ret)); + cb && cb(); } else { retries++; // try again - setTimeout(closeSocket, 100); + setTimeout(function(){ + closeSocket(cb); + }, 100); } } else { self.socket = null; self.emit('close'); + cb && cb(); } } if (tryToClose !== false) { - closeSocket(); + closeSocket(function(){ + self.removeAllListeners(); + }); + } else { + self.removeAllListeners(); } + } TCPSocket.prototype.destroy = TCPSocket.prototype.close = function () { @@ -511,7 +520,6 @@ TCPSocket.prototype.destroy = TCPSocket.prototype.close = function () { self.__close(); } } - self.removeAllListeners(); }); };