Skip to content

Commit 3d36682

Browse files
authored
fix(lib-storage): cleanup stream listeners to prevent memory leak
Clean up event listeners in lib-storage's to prevents memory leaks caused by streaming the data to a growing number of variables as the function runs on longer files.
1 parent 64d2210 commit 3d36682

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

Diff for: lib/storage/src/data-chunk/readable-helper.ts

+12-1
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,28 @@ export async function* chunkFromReadable(reader: Readable, chunkSize: number): A
3636
function _chunkFromStream(stream: Readable, chunkSize: number, oldBuffer: Buffer): Promise<StreamChunk> {
3737
let currentChunk = oldBuffer;
3838
return new Promise((resolve, reject) => {
39+
const cleanupListeners = () => {
40+
stream.removeAllListeners("data");
41+
stream.removeAllListeners("error");
42+
stream.removeAllListeners("end");
43+
};
44+
3945
stream.on("data", (chunk) => {
4046
currentChunk = Buffer.concat([currentChunk, Buffer.from(chunk)]);
4147
if (currentChunk.length >= chunkSize) {
48+
cleanupListeners();
4249
resolve({
4350
Body: currentChunk,
4451
ended: false,
4552
});
4653
}
4754
});
48-
stream.on("error", reject);
55+
stream.on("error", (err) => {
56+
cleanupListeners();
57+
reject(err);
58+
});
4959
stream.on("end", () => {
60+
cleanupListeners();
5061
resolve({
5162
Body: currentChunk,
5263
ended: true,

0 commit comments

Comments
 (0)