diff options
author | Robert Nagy <ronagy@icloud.com> | 2019-07-14 21:45:04 +0200 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2019-10-15 16:51:09 -0700 |
commit | d247a8e1dc398b76558b7eb8cceace911047e912 (patch) | |
tree | 6464fc2c1840072f402ec82e55e8bee4fa661d1b /lib | |
parent | 90b5f1b1078961897082842b89d7bc9631ebf312 (diff) | |
download | android-node-v8-d247a8e1dc398b76558b7eb8cceace911047e912.tar.gz android-node-v8-d247a8e1dc398b76558b7eb8cceace911047e912.tar.bz2 android-node-v8-d247a8e1dc398b76558b7eb8cceace911047e912.zip |
http: emit close on socket re-use
PR-URL: https://github.com/nodejs/node/pull/28685
Refs: https://github.com/nodejs/node/issues/28684
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/_http_client.js | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/_http_client.js b/lib/_http_client.js index d55bc850bc..fcf1cf90fd 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -608,7 +608,7 @@ function responseKeepAlive(req) { const asyncId = socket._handle ? socket._handle.getAsyncId() : undefined; // Mark this socket as available, AFTER user-added end // handlers have a chance to run. - defaultTriggerAsyncIdScope(asyncId, process.nextTick, emitFreeNT, socket); + defaultTriggerAsyncIdScope(asyncId, process.nextTick, emitFreeNT, req); } function responseOnEnd() { @@ -630,7 +630,7 @@ function responseOnEnd() { socket.end(); } assert(!socket.writable); - } else if (req.finished) { + } else if (req.finished && !this.aborted) { // We can assume `req.finished` means all data has been written since: // - `'responseOnEnd'` means we have been assigned a socket. // - when we have a socket we write directly to it without buffering. @@ -647,8 +647,15 @@ function requestOnPrefinish() { responseKeepAlive(req); } -function emitFreeNT(socket) { - socket.emit('free'); +function emitFreeNT(req) { + req.emit('close'); + if (req.res) { + req.res.emit('close'); + } + + if (req.socket) { + req.socket.emit('free'); + } } function tickOnSocket(req, socket) { @@ -718,6 +725,7 @@ function onSocketNT(req, socket) { if (!req.agent) { socket.destroy(); } else { + req.emit('close'); socket.emit('free'); } } else { |