fix memory leak when using createReadStream

This commit is contained in:
Tobias Koppers 2020-12-14 11:06:15 +01:00
parent 1b00c9986f
commit 005bdbbefd
3 changed files with 21 additions and 14 deletions

View File

@ -435,18 +435,25 @@ class FileMiddleware extends SerializerMiddleware {
const file = name
? join(this.fs, filename, `../${name}${extension}`)
: filename;
const stream = this.fs.createReadStream(file, {
highWaterMark: 500 * 1024 * 1024 // 500 MB
});
const buf = [];
stream.on("data", data => {
buf.push(data);
});
stream.on("end", () => {
resolve(buf);
});
stream.on("error", err => {
reject(err);
this.fs.stat(file, (err, stats) => {
if (err) {
reject(err);
return;
}
const stream = this.fs.createReadStream(file, {
end: stats.size,
highWaterMark: stats.size // 500 MB
});
const buf = [];
stream.on("data", data => {
buf.push(data);
});
stream.on("end", () => {
resolve(buf);
});
stream.on("error", err => {
reject(err);
});
});
});
return deserialize(this, false, readFile);

View File

@ -73,7 +73,7 @@ const path = require("path");
* @typedef {Object} IntermediateFileSystemExtras
* @property {function(string): void} mkdirSync
* @property {function(string): import("fs").WriteStream} createWriteStream
* @property {function(string, { highWaterMark?: number }): import("fs").ReadStream} createReadStream
* @property {function(string, { highWaterMark?: number, end?: number }): import("fs").ReadStream} createReadStream
* @property {function(string, string, Callback): void} rename
*/

2
types.d.ts vendored
View File

@ -3692,7 +3692,7 @@ declare interface IntermediateFileSystemExtras {
createWriteStream: (arg0: string) => WriteStream;
createReadStream: (
arg0: string,
arg1: { highWaterMark?: number }
arg1: { highWaterMark?: number; end?: number }
) => ReadStream;
rename: (
arg0: string,