diff --git a/lib/fs.js b/lib/fs.js index 5329290f2a0..0f2318d5845 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -838,7 +838,9 @@ ReadStream.prototype.setEncoding = function(encoding) { ReadStream.prototype._read = function() { var self = this; - if (!self.readable || self.paused) return; + if (!self.readable || self.paused || self.reading) return; + + self.reading = true; if (!pool || pool.length - pool.used < kMinPoolSpace) { // discard the old pool. Can't add to the free list because @@ -864,6 +866,7 @@ ReadStream.prototype._read = function() { } function afterRead(err, bytesRead) { + self.reading = false; if (err) { self.emit('error', err); self.readable = false; diff --git a/test/simple/test-fs-read-stream.js b/test/simple/test-fs-read-stream.js index 8b821c01d8f..188c95d52db 100644 --- a/test/simple/test-fs-read-stream.js +++ b/test/simple/test-fs-read-stream.js @@ -42,8 +42,13 @@ file.addListener('open', function(fd) { callbacks.open++; assert.equal('number', typeof fd); assert.ok(file.readable); -}); + // GH-535 + file.pause(); + file.resume(); + file.pause(); + file.resume(); +}); file.addListener('data', function(data) { assert.ok(data instanceof Buffer);