Skip to content

Commit 5fde362

Browse files
MichaelDeBoeymarwan38donavonbrophdawg11
authored
fix(fetch): fix memory leak when passing keepAlive (#83)
* fix: memory leak when using keepAlive * chore: fix changeset * remove socket listeners on "abort" Co-authored-by: Matt Brophy <[email protected]> * chore: remove obsolete changeset --------- Co-authored-by: Marwan Fikrat <[email protected]> Co-authored-by: Donavon West <[email protected]> Co-authored-by: Matt Brophy <[email protected]>
1 parent dcea779 commit 5fde362

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

.changeset/giant-taxis-breathe.md

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

packages/fetch/src/fetch.js

+14-8
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,7 +359,18 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) {
364359
}
365360

366361
previousChunk = buf;
367-
});
362+
};
363+
364+
socket.prependListener('close', onSocketClose);
365+
socket.on('data', onData);
366+
367+
const removeSocketListeners = () => {
368+
socket.removeListener('close', onSocketClose);
369+
socket.removeListener('data', onData);
370+
}
371+
372+
request.on('close', removeSocketListeners);
373+
request.on('abort', removeSocketListeners);
368374
});
369375
}
370376

0 commit comments

Comments
 (0)