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:
parent
db706da235
commit
605d7c4d6a
@ -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');
|
||||
}
|
||||
|
16
test/parallel/test-stream-write-drain.js
Normal file
16
test/parallel/test-stream-write-drain.js
Normal 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();
|
Loading…
x
Reference in New Issue
Block a user