summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRobert Nagy <ronagy@icloud.com>2019-07-14 21:45:04 +0200
committerRich Trott <rtrott@gmail.com>2019-10-15 16:51:09 -0700
commitd247a8e1dc398b76558b7eb8cceace911047e912 (patch)
tree6464fc2c1840072f402ec82e55e8bee4fa661d1b /lib
parent90b5f1b1078961897082842b89d7bc9631ebf312 (diff)
downloadandroid-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.js16
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 {