Skip to content

Commit b36a6e9

Browse files
ronagBridgeAR
authored andcommitted
stream: do not emit drain if stream ended
PR-URL: #29086 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
1 parent 293c9f0 commit b36a6e9

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

lib/_stream_writable.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -480,15 +480,17 @@ function onwrite(stream, er) {
480480
}
481481

482482
if (sync) {
483-
process.nextTick(afterWrite, stream, state, finished, cb);
483+
process.nextTick(afterWrite, stream, state, cb);
484484
} else {
485-
afterWrite(stream, state, finished, cb);
485+
afterWrite(stream, state, cb);
486486
}
487487
}
488488
}
489489

490-
function afterWrite(stream, state, finished, cb) {
491-
if (!finished && state.length === 0 && state.needDrain) {
490+
function afterWrite(stream, state, cb) {
491+
const needDrain = !state.ending && !stream.destroyed && state.length === 0 &&
492+
state.needDrain;
493+
if (needDrain) {
492494
state.needDrain = false;
493495
stream.emit('drain');
494496
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
'use strict';
2+
const common = require('../common');
3+
const { Writable } = require('stream');
4+
5+
// Don't emit 'drain' if ended
6+
7+
const w = new Writable({
8+
write(data, enc, cb) {
9+
process.nextTick(cb);
10+
},
11+
highWaterMark: 1
12+
});
13+
14+
w.on('drain', common.mustNotCall());
15+
w.write('asd');
16+
w.end();

0 commit comments

Comments
 (0)