Skip to content

Commit

Permalink
Fix leaking listeners (#1295) (#1474)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
felipec committed May 7, 2022
1 parent 004b3ac commit 043a5fc
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions src/index.js
Expand Up @@ -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
Expand All @@ -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);
});
});
}

0 comments on commit 043a5fc

Please sign in to comment.