[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,12 +545,15 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, buffer)
// from `reverseProxy` and `proxySocket`. // from `reverseProxy` and `proxySocket`.
// //
function detach() { function detach() {
proxySocket.destroySoon(); if (!detached) {
proxySocket.removeListener('end', listeners.onIncomingClose); detached = true;
proxySocket.removeListener('data', listeners.onIncoming); proxySocket.destroySoon();
reverseProxy.incoming.socket.destroySoon(); proxySocket.removeListener('end', listeners.onIncomingClose);
reverseProxy.incoming.socket.removeListener('end', listeners.onOutgoingClose); proxySocket.removeListener('data', listeners.onIncoming);
reverseProxy.incoming.socket.removeListener('data', listeners.onOutgoing); reverseProxy.incoming.socket.destroySoon();
reverseProxy.incoming.socket.removeListener('end', listeners.onOutgoingClose);
reverseProxy.incoming.socket.removeListener('data', listeners.onOutgoing);
}
} }
// //