Skip to content

Commit 605d7c4

Browse files
ronagTrott
authored andcommitted
stream: do not emit drain if stream ended
PR-URL: nodejs/node#29086 Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Rich Trott <[email protected]>
1 parent db706da commit 605d7c4

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

lib/_stream_writable.js

+6-4
Original file line numberDiff line numberDiff line change
@@ -479,15 +479,17 @@ function onwrite(stream, er) {
479479
}
480480

481481
if (sync) {
482-
process.nextTick(afterWrite, stream, state, finished, cb);
482+
process.nextTick(afterWrite, stream, state, cb);
483483
} else {
484-
afterWrite(stream, state, finished, cb);
484+
afterWrite(stream, state, cb);
485485
}
486486
}
487487
}
488488

489-
function afterWrite(stream, state, finished, cb) {
490-
if (!finished && state.length === 0 && state.needDrain) {
489+
function afterWrite(stream, state, cb) {
490+
const needDrain = !state.ending && !stream.destroyed && state.length === 0 &&
491+
state.needDrain;
492+
if (needDrain) {
491493
state.needDrain = false;
492494
stream.emit('drain');
493495
}
+16
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)