0
0
mirror of https://github.com/nodejs/node.git synced 2024-11-21 21:19:50 +01:00
nodejs/test/parallel/test-stream-pipe-deadlock.js
Robert Nagy b34c5a27c6
stream: fix deadlock when pipeing to full sink
When piping a paused Readable to a full Writable we didn't
register a drain listener which cause the src to never
resume.

Refs: https://github.com/nodejs/node/issues/48666
PR-URL: https://github.com/nodejs/node/pull/48691
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
2023-07-12 14:31:49 +00:00

28 lines
690 B
JavaScript

'use strict';
const common = require('../common');
const { Readable, Writable } = require('stream');
// https://github.com/nodejs/node/issues/48666
(async () => {
// Prepare src that is internally ended, with buffered data pending
const src = new Readable({ read() {} });
src.push(Buffer.alloc(100));
src.push(null);
src.pause();
// Give it time to settle
await new Promise((resolve) => setImmediate(resolve));
const dst = new Writable({
highWaterMark: 1000,
write(buf, enc, cb) {
process.nextTick(cb);
}
});
dst.write(Buffer.alloc(1000)); // Fill write buffer
dst.on('finish', common.mustCall());
src.pipe(dst);
})().then(common.mustCall());