GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — stream: cleanup() when unpiping all streams. · nodejs/node@10231a9

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
  • lib
    • _stream_readable.js
  • test/parallel
    • test-stream-pipe-unpipe-streams.js
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎lib/_stream_readable.js‎

Copy file name to clipboardExpand all lines: lib/_stream_readable.js
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -747,7 +747,7 @@ Readable.prototype.unpipe = function(dest) {
747747
state.flowing = false;
748748

749749
for (var i = 0; i < len; i++)
750-
dests[i].emit('unpipe', this, unpipeInfo);
750+
dests[i].emit('unpipe', this, { hasUnpiped: false });
751751
return this;
752752
}
753753

Collapse file

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

Copy file name to clipboardExpand all lines: test/parallel/test-stream-pipe-unpipe-streams.js
+54Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,57 @@ source.unpipe(dest2);
3131
source.unpipe(dest1);
3232

3333
assert.strictEqual(source._readableState.pipes, null);
34+
35+
{
36+
// test `cleanup()` if we unpipe all streams.
37+
const source = Readable({ read: () => {} });
38+
const dest1 = Writable({ write: () => {} });
39+
const dest2 = Writable({ write: () => {} });
40+
41+
let destCount = 0;
42+
const srcCheckEventNames = ['end', 'data'];
43+
const destCheckEventNames = ['close', 'finish', 'drain', 'error', 'unpipe'];
44+
45+
const checkSrcCleanup = common.mustCall(() => {
46+
assert.strictEqual(source._readableState.pipes, null);
47+
assert.strictEqual(source._readableState.pipesCount, 0);
48+
assert.strictEqual(source._readableState.flowing, false);
49+
50+
srcCheckEventNames.forEach((eventName) => {
51+
assert.strictEqual(
52+
source.listenerCount(eventName), 0,
53+
`source's '${eventName}' event listeners not removed`
54+
);
55+
});
56+
});
57+
58+
function checkDestCleanup(dest) {
59+
const currentDestId = ++destCount;
60+
source.pipe(dest);
61+
62+
const unpipeChecker = common.mustCall(() => {
63+
assert.deepStrictEqual(
64+
dest.listeners('unpipe'), [unpipeChecker],
65+
`destination{${currentDestId}} should have a 'unpipe' event ` +
66+
'listener which is `unpipeChecker`'
67+
);
68+
dest.removeListener('unpipe', unpipeChecker);
69+
destCheckEventNames.forEach((eventName) => {
70+
assert.strictEqual(
71+
dest.listenerCount(eventName), 0,
72+
`destination{${currentDestId}}'s '${eventName}' event ` +
73+
'listeners not removed'
74+
);
75+
});
76+
77+
if (--destCount === 0)
78+
checkSrcCleanup();
79+
});
80+
81+
dest.on('unpipe', unpipeChecker);
82+
}
83+
84+
checkDestCleanup(dest1);
85+
checkDestCleanup(dest2);
86+
source.unpipe();
87+
}

0 commit comments

Comments
0 (0)
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.