[refactor] Improved event handler cleanup

This commit is contained in:
Marak Squires 2011-10-25 09:09:40 -07:00
parent 9e630daf81
commit 9f923325d0

View File

@ -236,24 +236,46 @@ HttpProxy.prototype.proxyRequest = function (req, res, buffer) {
res.on('drain', ondrain); res.on('drain', ondrain);
// function onend() {
// When the `reverseProxy` `response` ends, end the cleanup();
// corresponding outgoing `res` unless we have entered res.end();
// an error state. In which case, assume `res.end()` has }
// already been called and the 'error' event listener
// removed.
//
response.on('end', function () {
if (!errState) {
reverseProxy.removeListener('error', proxyError);
try { res.end() } function onclose() {
catch (ex) { console.error("res.end error: %s", ex.message) } cleanup();
res.destroy();
}
response.on('close', onclose);
response.on('end', onend);
response.on('error', proxyError);
res.on('error', proxyError);
function cleanup() {
response.removeListener('data', ondata);
res.removeListener('drain', ondrain);
response.removeListener('end', onend);
response.removeListener('close', onclose);
response.removeListener('error', proxyError);
res.removeListener('error', proxyError);
response.removeListener('end', cleanup);
response.removeListener('close', cleanup);
res.removeListener('end', cleanup);
res.removeListener('close', cleanup);
}
response.on('end', cleanup);
response.on('close', cleanup);
res.on('end', cleanup);
res.on('close', cleanup);
// Emit the `end` event now that we have completed proxying
self.emit('end', req, res);
}
});
}); });
// //