From a681493371ae63f026e869bf58b6fea682dc5de3 Mon Sep 17 00:00:00 2001 From: indexzero Date: Sat, 9 Mar 2013 00:40:00 -0500 Subject: [PATCH] [fix minor] Prevent crashes from attempting to remove listeners more than once when proxying websocket requests. --- lib/node-http-proxy/http-proxy.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/node-http-proxy/http-proxy.js b/lib/node-http-proxy/http-proxy.js index ffc2c9d..cdc5b66 100644 --- a/lib/node-http-proxy/http-proxy.js +++ b/lib/node-http-proxy/http-proxy.js @@ -472,6 +472,8 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, buffer) // the appropriate events. // function onUpgrade (reverseProxy, proxySocket) { + var detached; + if (!reverseProxy) { proxySocket.end(); socket.end(); @@ -543,12 +545,15 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, buffer) // from `reverseProxy` and `proxySocket`. // function detach() { - proxySocket.destroySoon(); - proxySocket.removeListener('end', listeners.onIncomingClose); - proxySocket.removeListener('data', listeners.onIncoming); - reverseProxy.incoming.socket.destroySoon(); - reverseProxy.incoming.socket.removeListener('end', listeners.onOutgoingClose); - reverseProxy.incoming.socket.removeListener('data', listeners.onOutgoing); + if (!detached) { + detached = true; + proxySocket.destroySoon(); + proxySocket.removeListener('end', listeners.onIncomingClose); + proxySocket.removeListener('data', listeners.onIncoming); + reverseProxy.incoming.socket.destroySoon(); + reverseProxy.incoming.socket.removeListener('end', listeners.onOutgoingClose); + reverseProxy.incoming.socket.removeListener('data', listeners.onOutgoing); + } } //