summaryrefslogtreecommitdiff
path: root/lib/_http_client.js
diff options
context:
space:
mode:
authorRobert Nagy <ronagy@icloud.com>2019-08-19 08:37:49 +0200
committerLuigi Pinca <luigipinca@gmail.com>2019-08-31 18:41:41 +0200
commitcad3a21c1d0d216ba0d0b4b8eaa7a468fab7c2a9 (patch)
treefd05cdba51df227b443cf3de6128a8fa6d1a231a /lib/_http_client.js
parent98b718572f9c136e7a11dc60e984d873d08346cc (diff)
downloadandroid-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.js18
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) {