diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js index a47a5b73ca052d..38b1a8437cdc83 100644 --- a/lib/_stream_readable.js +++ b/lib/_stream_readable.js @@ -740,6 +740,7 @@ Readable.prototype.pipe = function(dest, pipeOpts) { debug('false write response, pause', state.awaitDrainWriters.size); state.awaitDrainWriters.add(dest); } + src.pause(); } if (!ondrain) { // When the dest drains, it reduces the awaitDrain counter @@ -749,7 +750,6 @@ Readable.prototype.pipe = function(dest, pipeOpts) { ondrain = pipeOnDrain(src, dest); dest.on('drain', ondrain); } - src.pause(); } } diff --git a/test/parallel/test-stream-readable-unpipe-resume.js b/test/parallel/test-stream-readable-unpipe-resume.js new file mode 100644 index 00000000000000..b40f724bccfc83 --- /dev/null +++ b/test/parallel/test-stream-readable-unpipe-resume.js @@ -0,0 +1,20 @@ +'use strict'; + +const common = require('../common'); +const stream = require('stream'); +const fs = require('fs'); + +const readStream = fs.createReadStream(process.execPath); + +const transformStream = new stream.Transform({ + transform: common.mustCall(() => { + readStream.unpipe(); + readStream.resume(); + }) +}); + +readStream.on('end', common.mustCall()); + +readStream + .pipe(transformStream) + .resume();