diff --git a/lib/internal/streams/writable.js b/lib/internal/streams/writable.js index 0dbf56d7a69ca9..4de88c48eebdb9 100644 --- a/lib/internal/streams/writable.js +++ b/lib/internal/streams/writable.js @@ -876,7 +876,7 @@ function needFinish(state) { function onFinish(stream, state, err) { if ((state[kState] & kPrefinished) !== 0) { - errorOrDestroy(stream, err ?? ERR_MULTIPLE_CALLBACK()); + errorOrDestroy(stream, err ?? new ERR_MULTIPLE_CALLBACK()); return; } state.pendingcb--; diff --git a/test/parallel/test-stream-err-multiple-callback-construction.js b/test/parallel/test-stream-err-multiple-callback-construction.js new file mode 100644 index 00000000000000..829af3ffe7265f --- /dev/null +++ b/test/parallel/test-stream-err-multiple-callback-construction.js @@ -0,0 +1,25 @@ +'use strict'; +const common = require('../common'); +const stream = require('stream'); +const assert = require('assert'); + +class TestWritable extends stream.Writable { + _write(_chunk, _encoding, callback) { + callback(); + } + + _final(callback) { + process.nextTick(callback); + process.nextTick(callback); + } +} + +const writable = new TestWritable(); + +writable.on('finish', common.mustCall()); +writable.on('error', common.mustCall((error) => { + assert.strictEqual(error.message, 'Callback called multiple times'); +})); + +writable.write('some data'); +writable.end();