From aee2077b961c84e9f01653bbe640b0b277c0508a Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Fri, 11 Oct 2019 16:31:09 +0200 Subject: [PATCH] fixup: prepend error listener + test --- lib/_stream_writable.js | 4 ++-- test/parallel/test-stream-writable-destroy.js | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js index fdb17ed33d52f5..1ec91cbcff0c02 100644 --- a/lib/_stream_writable.js +++ b/lib/_stream_writable.js @@ -727,8 +727,8 @@ function onFinished(stream, state, cb) { stream.removeListener('error', onerror); cb(); } - stream.on('finish', onfinish); - stream.on('error', onerror); + stream.prependListener('finish', onfinish); + stream.prependListener('error', onerror); } Object.defineProperty(Writable.prototype, 'destroyed', { diff --git a/test/parallel/test-stream-writable-destroy.js b/test/parallel/test-stream-writable-destroy.js index 60e702d4b12a96..30e4503c05773a 100644 --- a/test/parallel/test-stream-writable-destroy.js +++ b/test/parallel/test-stream-writable-destroy.js @@ -328,3 +328,19 @@ const assert = require('assert'); })); write.end(); } + +{ + // Call end(cb) after error & destroy and don't trigger + // unhandled exception. + + const write = new Writable({ + write(chunk, enc, cb) { process.nextTick(cb); } + }); + write.once('error', common.mustCall((err) => { + assert.strictEqual(err.message, 'asd'); + })); + write.end('asd', common.mustCall((err) => { + assert.strictEqual(err.message, 'asd'); + })); + write.destroy(new Error('asd')); +}