probe-image-size
probe-image-size copied to clipboard
MaxListenersExceededWarning with fs.createReadStream
Hi there and thank you for this package!
I am seeing a MaxListenersExceededWarning while using createReadStream and probe-image-size like follows:
const readStream = fs.createReadStream(filePath);
const result = await probeImageSize(readStream);
It seems to be coming from this package. Here is the full error with node --trace-warnings:
(node:74217) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 end listeners added to [PassThrough]. Use emitter.setMaxListeners() to increase limit
at _addListener (node:events:587:17)
at PassThrough.addListener (node:events:605:10)
at PassThrough.Readable.on (node:internal/streams/readable:887:35)
at eos (node:internal/streams/end-of-stream:196:10)
at pipe (node:internal/streams/pipeline:392:10)
at pipelineImpl (node:internal/streams/pipeline:323:25)
at pipeline (node:internal/streams/pipeline:151:10)
at probeStream (/MY-PROJECT-PATH/node_modules/probe-image-size/stream.js:63:8)
at Object.get_image_size [as default] (/MY-PROJECT-PATH/node_modules/probe-image-size/index.js:13:12)
I've adjusted the code to not use a createReadStream and instead read the full file to memory first as follows:
const data = fs.readFileSync(filePath)
const result = await probe.sync(data)
Issue goes away. Is this indeed caused by something within probe-image-size? It appears so on my end but can't figure out how to resolve / diagnose further.
One other thing I should note is that we did try to destroy and close the readStream after having used it. For example:
const readStream = fs.createReadStream(filePath);
const result = await probeImageSize(readStream);
readStream.destroy() // also tried `close()`
But this does not fix the warning either.
Any ideas?
Didn't I fix this in https://github.com/nodeca/probe-image-size/commit/a6da059439614c399b79c09ea1d406a3e4300b27? Maybe you're using old version (which may happen because of some other dependency).
Or the error might've reappeared elsewhere. In this case, please provide full example that we can run as is.