From 48e7a2e6bcf8c230accdeb86af13f757cc38f12e Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sun, 15 Mar 2020 00:50:09 +0100 Subject: [PATCH 1/2] stream: don't emit 'finish' after 'error' --- lib/_stream_writable.js | 4 ++++ test/parallel/test-stream-writable-write-writev-finish.js | 1 + 2 files changed, 5 insertions(+) diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js index 805cbd0db020c0..a27598d2c16ac0 100644 --- a/lib/_stream_writable.js +++ b/lib/_stream_writable.js @@ -666,6 +666,10 @@ function finishMaybe(stream, state, sync) { function finish(stream, state) { state.pendingcb--; + if (state.errorEmitted) { + return; + } + state.finished = true; stream.emit('finish'); diff --git a/test/parallel/test-stream-writable-write-writev-finish.js b/test/parallel/test-stream-writable-write-writev-finish.js index aa43b1490c8600..9fce315f8b2e1a 100644 --- a/test/parallel/test-stream-writable-write-writev-finish.js +++ b/test/parallel/test-stream-writable-write-writev-finish.js @@ -132,6 +132,7 @@ const stream = require('stream'); process.nextTick(cb); }; w.on('error', common.mustCall()); + w.on('finish', common.mustNotCall()); w.on('prefinish', () => { w.write("shouldn't write in prefinish listener"); }); From 271f1192e928dc18677a7c559df25950a22eefc6 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Mon, 16 Mar 2020 16:52:26 +0100 Subject: [PATCH 2/2] Update lib/_stream_writable.js Co-Authored-By: James M Snell --- lib/_stream_writable.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js index a27598d2c16ac0..3e0a005c520a3c 100644 --- a/lib/_stream_writable.js +++ b/lib/_stream_writable.js @@ -666,9 +666,8 @@ function finishMaybe(stream, state, sync) { function finish(stream, state) { state.pendingcb--; - if (state.errorEmitted) { + if (state.errorEmitted) return; - } state.finished = true; stream.emit('finish');