summaryrefslogtreecommitdiff
path: root/lib/_http_server.js
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-07-12 00:32:21 +0200
committerAnna Henningsen <anna@addaleax.net>2019-07-28 22:14:55 +0200
commit779a05d5d1bfe2eeb05386f6415d36f80ca0b3b5 (patch)
tree4b216f8b85fec2427b2f63e59727d1c90162eadf /lib/_http_server.js
parent35cb9558658e587d98b6d83bfd2b1642ba2cc8c2 (diff)
downloadandroid-node-v8-779a05d5d1bfe2eeb05386f6415d36f80ca0b3b5.tar.gz
android-node-v8-779a05d5d1bfe2eeb05386f6415d36f80ca0b3b5.tar.bz2
android-node-v8-779a05d5d1bfe2eeb05386f6415d36f80ca0b3b5.zip
http: reset parser.incoming when server response is finished
This resolves a memory leak for keep-alive connections with a naïve approach. Fixes: https://github.com/nodejs/node/issues/9668 PR-URL: https://github.com/nodejs/node/pull/28646 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'lib/_http_server.js')
-rw-r--r--lib/_http_server.js2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/_http_server.js b/lib/_http_server.js
index 6a262eedc2..4a96466090 100644
--- a/lib/_http_server.js
+++ b/lib/_http_server.js
@@ -621,6 +621,8 @@ function resOnFinish(req, res, socket, state, server) {
assert(state.incoming.length === 0 || state.incoming[0] === req);
state.incoming.shift();
+ // Reset the .incoming property so that the request object can be gc'ed.
+ if (socket.parser) socket.parser.incoming = null;
// If the user never called req.read(), and didn't pipe() or
// .resume() or .on('data'), then we call req._dump() so that the