probe-image-size icon indicating copy to clipboard operation
probe-image-size copied to clipboard

MaxListenersExceededWarning with fs.createReadStream

Open jmikrut opened this issue 1 year ago • 1 comments

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?

jmikrut avatar Mar 28 '23 15:03 jmikrut

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.

rlidwka avatar May 26 '23 10:05 rlidwka