Skip to content

Commit 3b9b384

Browse files
authored
fix: memory leak when using keepAlive (#24)
solution from https://github.com/node-fetch/node-fetch/pull/1474/files
1 parent 44974d1 commit 3b9b384

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

.changeset/giant-taxis-breathe.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@remix-run/web-fetch": patch
3+
---
4+
5+
Memory leak caused by unregistered listeners. Solution was copied from a node-fetch pr.

packages/fetch/src/fetch.js

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -346,13 +346,8 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) {
346346
}
347347
};
348348

349-
socket.prependListener('close', onSocketClose);
350-
351-
request.on('abort', () => {
352-
socket.removeListener('close', onSocketClose);
353-
});
354-
355-
socket.on('data', buf => {
349+
/** @param {Buffer} buf */
350+
const onData = buf => {
356351
properLastChunkReceived = Buffer.compare(buf.slice(-5), LAST_CHUNK) === 0;
357352

358353
// Sometimes final 0-length chunk and end of message code are in separate packets
@@ -364,6 +359,14 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) {
364359
}
365360

366361
previousChunk = buf;
362+
};
363+
364+
socket.prependListener('close', onSocketClose);
365+
socket.on('data', onData);
366+
367+
request.on('close', () => {
368+
socket.removeListener('close', onSocketClose);
369+
socket.removeListener('data', onData);
367370
});
368371
});
369372
}

0 commit comments

Comments
 (0)