Skip to content

Commit

Permalink
stream: fix premature pipeline end
Browse files Browse the repository at this point in the history
Fixes: #48406
PR-URL: #48435
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Debadree Chatterjee <debadree333@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
ronag authored and ruyadorno committed Sep 12, 2023

Verified

This commit was signed with the committer’s verified signature.
ruyadorno Ruy Adorno
1 parent 5d682c5 commit 786fbdb
Showing 2 changed files with 30 additions and 2 deletions.
4 changes: 2 additions & 2 deletions lib/internal/streams/pipeline.js
Original file line number Diff line number Diff line change
@@ -38,7 +38,7 @@ const {
isTransformStream,
isWebStream,
isReadableStream,
isReadableEnded,
isReadableFinished,
} = require('internal/streams/utils');
const { AbortController } = require('internal/abort_controller');

@@ -424,7 +424,7 @@ function pipe(src, dst, finish, { end }) {
dst.end();
}

if (isReadableEnded(src)) { // End the destination if the source has already ended.
if (isReadableFinished(src)) { // End the destination if the source has already ended.
process.nextTick(endFn);
} else {
src.once('end', endFn);
28 changes: 28 additions & 0 deletions test/parallel/test-stream-pipeline.js
Original file line number Diff line number Diff line change
@@ -1634,3 +1634,31 @@ const tsp = require('timers/promises');
assert.strictEqual(writable.closed, false);
}));
}

{
const r = new Readable();
for (let i = 0; i < 4000; i++) {
r.push('asdfdagljanfgkaljdfn');
}
r.push(null);

let ended = false;
r.on('end', () => {
ended = true;
});

const w = new Writable({
write(chunk, enc, cb) {
cb(null);
},
final: common.mustCall((cb) => {
assert.strictEqual(ended, true);
cb(null);
})
});

pipeline(r, w, common.mustCall((err) => {
assert.strictEqual(err, undefined);
}));

}

0 comments on commit 786fbdb

Please sign in to comment.