diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js index 5b0972f2d73e5d..5edae5a5f7cc5d 100644 --- a/lib/_stream_readable.js +++ b/lib/_stream_readable.js @@ -818,7 +818,7 @@ Readable.prototype.unpipe = function(dest) { // remove all. var dests = state.pipes; state.pipes = []; - state.flowing = false; + this.pause(); for (const dest of dests) dest.emit('unpipe', this, { hasUnpiped: false }); @@ -832,7 +832,7 @@ Readable.prototype.unpipe = function(dest) { state.pipes.splice(index, 1); if (state.pipes.length === 0) - state.flowing = false; + this.pause(); dest.emit('unpipe', this, unpipeInfo); diff --git a/test/parallel/test-stream-pipe-unpipe-streams.js b/test/parallel/test-stream-pipe-unpipe-streams.js index 4cb8413af22f18..b1a673d9450ce8 100644 --- a/test/parallel/test-stream-pipe-unpipe-streams.js +++ b/test/parallel/test-stream-pipe-unpipe-streams.js @@ -84,3 +84,13 @@ assert.strictEqual(source._readableState.pipes.length, 0); checkDestCleanup(dest2); source.unpipe(); } + +{ + const src = Readable({ read: () => {} }); + const dst = Writable({ write: () => {} }); + src.pipe(dst); + src.on('resume', common.mustCall(() => { + src.on('pause', common.mustCall()); + src.unpipe(dst); + })); +}