From c83d88ee88faac10b53cd4296165ed85f26036b4 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 25 Oct 2011 16:13:43 +0000 Subject: [PATCH] Revert "[refactor] Improved event handler cleanup " This reverts commit 9f923325d08ac018a3325beaa9e0805b5eda61e6. --- lib/node-http-proxy/http-proxy.js | 58 ++++++++++--------------------- 1 file changed, 18 insertions(+), 40 deletions(-) diff --git a/lib/node-http-proxy/http-proxy.js b/lib/node-http-proxy/http-proxy.js index dd605c9..1ff76a6 100644 --- a/lib/node-http-proxy/http-proxy.js +++ b/lib/node-http-proxy/http-proxy.js @@ -236,46 +236,24 @@ HttpProxy.prototype.proxyRequest = function (req, res, buffer) { res.on('drain', ondrain); - function onend() { - cleanup(); - res.end(); - } - - function onclose() { - 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); - + // + // When the `reverseProxy` `response` ends, end the + // corresponding outgoing `res` unless we have entered + // 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() } + catch (ex) { console.error("res.end error: %s", ex.message) } + + // Emit the `end` event now that we have completed proxying + self.emit('end', req, res); + } + }); }); //