From ff68404105e237bc3ede1629b52138c53698da83 Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Sun, 23 Jan 2022 17:42:45 -0600 Subject: [PATCH] Fix leaking listeners (#1295) Since 8eeeec1 it seems listeners have been leaking on keep-alive sockets. Apparently abort() has been deprecated since v17, using close() the onSocketClose listener is properly removed, and by creating a new onData function I'm able to remove the 'data' listener too. --- src/index.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/index.js b/src/index.js index f5f39844e..513b05225 100644 --- a/src/index.js +++ b/src/index.js @@ -387,13 +387,7 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) { } }; - socket.prependListener('close', onSocketClose); - - request.on('abort', () => { - socket.removeListener('close', onSocketClose); - }); - - socket.on('data', buf => { + const onData = buf => { properLastChunkReceived = Buffer.compare(buf.slice(-5), LAST_CHUNK) === 0; // Sometimes final 0-length chunk and end of message code are in separate packets @@ -405,6 +399,14 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) { } previousChunk = buf; + }; + + socket.prependListener('close', onSocketClose); + socket.on('data', onData); + + request.on('close', () => { + socket.removeListener('close', onSocketClose); + socket.removeListener('data', onData); }); }); }