stream: do not emit drain if stream ended

PR-URL: https://github.com/nodejs/node/pull/29086
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
This commit is contained in:
Robert Nagy 2019-08-11 17:25:13 +02:00 committed by Rich Trott
parent db706da235
commit 605d7c4d6a
2 changed files with 22 additions and 4 deletions

View File

@ -479,15 +479,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');
}

View File

@ -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();