[fix minor] Prevent crashes from attempting to remove listeners more than once when proxying websocket requests.

This commit is contained in:
indexzero 2013-03-09 00:40:00 -05:00
parent 2055d0c8ec
commit a681493371

View File

@ -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);
}
}
//