Skip to content

Commit

Permalink
[fix] Memory leak hunting.
Browse files Browse the repository at this point in the history
  • Loading branch information
indexzero committed Sep 8, 2011
1 parent e1c41d0 commit ca1d12c
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 5 deletions.
8 changes: 8 additions & 0 deletions lib/node-http-proxy.js
Expand Up @@ -174,6 +174,14 @@ exports.buffer = function (obj) {
obj.removeListener('data', onData);
obj.removeListener('end', onEnd);
},
destroy: function () {
this.end();
this.resume = function () {
console.error("Cannot resume buffer after destroying it.");
};

onData = onEnd = events = obj = null;
},
resume: function () {
this.end();
for (var i = 0, len = events.length; i < len; ++i) {
Expand Down
18 changes: 13 additions & 5 deletions lib/node-http-proxy/http-proxy.js
Expand Up @@ -279,9 +279,13 @@ HttpProxy.prototype.proxyRequest = function (req, res, buffer) {
}
});

//
// If we have been passed buffered data, resume it.
if (buffer && !errState) {
buffer.resume();
//
if (buffer) {
return !errState
? buffer.resume()
: buffer.destroy();
}
};

Expand Down Expand Up @@ -419,6 +423,7 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, buffer)
reverseProxy.incoming.socket.write(data);
}
catch (ex) {
detach();
reverseProxy.incoming.socket.end();
proxySocket.end();
}
Expand All @@ -429,12 +434,13 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, buffer)
// Any outgoing data on this Websocket from the proxy target
// will be written to the `proxySocket` socket.
//
reverseProxy.incoming.socket.on('data', listeners.onOutgoing = function(data) {
reverseProxy.incoming.socket.on('data', listeners.onOutgoing = function (data) {
try {
self.emit('websocket:incoming', reverseProxy, reverseProxy.incoming, head, data);
proxySocket.write(data);
}
catch (ex) {
detach();
proxySocket.end();
socket.end();
}
Expand Down Expand Up @@ -625,7 +631,9 @@ HttpProxy.prototype.proxyWebSocketRequest = function (req, socket, head, buffer)
//
// If we have been passed buffered data, resume it.
//
if (buffer && !errState) {
buffer.resume();
if (buffer) {
return !errState
? buffer.resume()
: buffer.destroy();
}
};

0 comments on commit ca1d12c

Please sign in to comment.