Skip to content

Commit 3500d5f

Browse files
author
陈刚
committed
stream: fix not calling cleanup() when unpiping all streams.
Refs: #12746
1 parent e1c29f2 commit 3500d5f

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

lib/_stream_readable.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,7 @@ Readable.prototype.unpipe = function(dest) {
759759
state.flowing = false;
760760

761761
for (var i = 0; i < len; i++)
762-
dests[i].emit('unpipe', this, unpipeInfo);
762+
dests[i].emit('unpipe', this, { hasUnpiped: false });
763763
return this;
764764
}
765765

test/parallel/test-stream-pipe-unpipe-streams.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,26 @@ source.unpipe(dest2);
3131
source.unpipe(dest1);
3232

3333
assert.strictEqual(source._readableState.pipes, null);
34+
35+
{
36+
// unpipe all
37+
const source = Readable({ read: () => {} });
38+
const dest1 = Writable({ write: () => {} });
39+
const dest2 = Writable({ write: () => {} });
40+
41+
source.pipe(dest1);
42+
source.pipe(dest2);
43+
44+
checkDestCleanup(dest1);
45+
checkDestCleanup(dest2);
46+
47+
source.unpipe();
48+
49+
function checkDestCleanup(dest) {
50+
const unpipeChecker = common.mustCall(() => {
51+
dest.removeListener('unpipe', unpipeChecker);
52+
assert.strictEqual(dest.listenerCount('unpipe'), 0);
53+
});
54+
dest.on('unpipe', unpipeChecker);
55+
}
56+
}

0 commit comments

Comments
 (0)