diff options
author | Robert Nagy <ronagy@icloud.com> | 2019-08-19 08:37:49 +0200 |
---|---|---|
committer | Luigi Pinca <luigipinca@gmail.com> | 2019-08-31 18:41:41 +0200 |
commit | cad3a21c1d0d216ba0d0b4b8eaa7a468fab7c2a9 (patch) | |
tree | fd05cdba51df227b443cf3de6128a8fa6d1a231a /lib/_http_client.js | |
parent | 98b718572f9c136e7a11dc60e984d873d08346cc (diff) | |
download | android-node-v8-cad3a21c1d0d216ba0d0b4b8eaa7a468fab7c2a9.tar.gz android-node-v8-cad3a21c1d0d216ba0d0b4b8eaa7a468fab7c2a9.tar.bz2 android-node-v8-cad3a21c1d0d216ba0d0b4b8eaa7a468fab7c2a9.zip |
http: simplify timeout handling
Avoids allocating and registering extra listeners for 'timeout'.
PR-URL: https://github.com/nodejs/node/pull/29200
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'lib/_http_client.js')
-rw-r--r-- | lib/_http_client.js | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/lib/_http_client.js b/lib/_http_client.js index 04d5a3f56e..1ab4dc95c5 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -629,6 +629,10 @@ function responseOnEnd() { const res = this; const req = this.req; + if (req.socket && req.timeoutCb) { + req.socket.removeListener('timeout', emitRequestTimeout); + } + req._ended = true; if (!req.shouldKeepAlive || req.finished) responseKeepAlive(res, req); @@ -683,11 +687,17 @@ function tickOnSocket(req, socket) { req.emit('socket', socket); } +function emitRequestTimeout() { + const req = this._httpMessage; + if (req) { + req.emit('timeout'); + } +} + function listenSocketTimeout(req) { if (req.timeoutCb) { return; } - const emitRequestTimeout = () => req.emit('timeout'); // Set timeoutCb so it will get cleaned up on request end. req.timeoutCb = emitRequestTimeout; // Delegate socket timeout event. @@ -698,12 +708,6 @@ function listenSocketTimeout(req) { socket.once('timeout', emitRequestTimeout); }); } - // Remove socket timeout listener after response end. - req.once('response', (res) => { - res.once('end', () => { - req.socket.removeListener('timeout', emitRequestTimeout); - }); - }); } ClientRequest.prototype.onSocket = function onSocket(socket) { |