[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. // the appropriate events.
// //
function onUpgrade (reverseProxy, proxySocket) { function onUpgrade (reverseProxy, proxySocket) {
var detached;
if (!reverseProxy) { if (!reverseProxy) {
proxySocket.end(); proxySocket.end();
socket.end(); socket.end();
@ -543,6 +545,8 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, buffer)
// from `reverseProxy` and `proxySocket`. // from `reverseProxy` and `proxySocket`.
// //
function detach() { function detach() {
if (!detached) {
detached = true;
proxySocket.destroySoon(); proxySocket.destroySoon();
proxySocket.removeListener('end', listeners.onIncomingClose); proxySocket.removeListener('end', listeners.onIncomingClose);
proxySocket.removeListener('data', listeners.onIncoming); proxySocket.removeListener('data', listeners.onIncoming);
@ -550,6 +554,7 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, buffer)
reverseProxy.incoming.socket.removeListener('end', listeners.onOutgoingClose); reverseProxy.incoming.socket.removeListener('end', listeners.onOutgoingClose);
reverseProxy.incoming.socket.removeListener('data', listeners.onOutgoing); reverseProxy.incoming.socket.removeListener('data', listeners.onOutgoing);
} }
}
// //
// If the incoming `proxySocket` socket closes, then // If the incoming `proxySocket` socket closes, then