From a7d029b8fe9b53aa454f94f60727f0142fae357c Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sun, 11 Aug 2019 17:25:13 +0200 Subject: [PATCH] stream: don't emit drain if ended --- lib/_stream_writable.js | 10 ++++++---- test/parallel/test-stream-write-drain.js | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 test/parallel/test-stream-write-drain.js diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js index 5d52b0d2a4a179..e3d794f6c8ffb3 100644 --- a/lib/_stream_writable.js +++ b/lib/_stream_writable.js @@ -470,15 +470,17 @@ function onwrite(stream, er) { } if (sync) { - process.nextTick(afterWrite, stream, state, finished, cb); + process.nextTick(afterWrite, stream, state, cb); } else { - afterWrite(stream, state, finished, cb); + afterWrite(stream, state, cb); } } } -function afterWrite(stream, state, finished, cb) { - if (!finished && state.length === 0 && state.needDrain) { +function afterWrite(stream, state, cb) { + const needDrain = !state.ending && !stream.destroyed && state.length === 0 && + state.needDrain; + if (needDrain) { state.needDrain = false; stream.emit('drain'); } diff --git a/test/parallel/test-stream-write-drain.js b/test/parallel/test-stream-write-drain.js new file mode 100644 index 00000000000000..bd65c1fdbb8a15 --- /dev/null +++ b/test/parallel/test-stream-write-drain.js @@ -0,0 +1,16 @@ +'use strict'; +const common = require('../common'); +const { Writable } = require('stream'); + +// Don't emit 'drain' if ended + +const w = new Writable({ + write(data, enc, cb) { + process.nextTick(cb); + }, + highWaterMark: 1 +}); + +w.on('drain', common.mustNotCall()); +w.write('asd'); +w.end();