Skip to content

Commit 043a5fc

Browse files
authored
Fix leaking listeners (#1295) (#1474)
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.
1 parent 004b3ac commit 043a5fc

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

src/index.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -387,13 +387,7 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) {
387387
}
388388
};
389389

390-
socket.prependListener('close', onSocketClose);
391-
392-
request.on('abort', () => {
393-
socket.removeListener('close', onSocketClose);
394-
});
395-
396-
socket.on('data', buf => {
390+
const onData = buf => {
397391
properLastChunkReceived = Buffer.compare(buf.slice(-5), LAST_CHUNK) === 0;
398392

399393
// Sometimes final 0-length chunk and end of message code are in separate packets
@@ -405,6 +399,14 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) {
405399
}
406400

407401
previousChunk = buf;
402+
};
403+
404+
socket.prependListener('close', onSocketClose);
405+
socket.on('data', onData);
406+
407+
request.on('close', () => {
408+
socket.removeListener('close', onSocketClose);
409+
socket.removeListener('data', onData);
408410
});
409411
});
410412
}

0 commit comments

Comments
 (0)