Skip to content

Commit a7d029b

Browse files
committed
stream: don't emit drain if ended
1 parent 8ef68e6 commit a7d029b

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
@@ -470,15 +470,17 @@ function onwrite(stream, er) {
470470
}
471471

472472
if (sync) {
473-
process.nextTick(afterWrite, stream, state, finished, cb);
473+
process.nextTick(afterWrite, stream, state, cb);
474474
} else {
475-
afterWrite(stream, state, finished, cb);
475+
afterWrite(stream, state, cb);
476476
}
477477
}
478478
}
479479

480-
function afterWrite(stream, state, finished, cb) {
481-
if (!finished && state.length === 0 && state.needDrain) {
480+
function afterWrite(stream, state, cb) {
481+
const needDrain = !state.ending && !stream.destroyed && state.length === 0 &&
482+
state.needDrain;
483+
if (needDrain) {
482484
state.needDrain = false;
483485
stream.emit('drain');
484486
}
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)