diff --git a/lib/fs.js b/lib/fs.js index d9d07401c5..d53c3605cf 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -1367,7 +1367,10 @@ ReadStream.prototype._emitData = function(d) { ReadStream.prototype.destroy = function(cb) { var self = this; - if (!this.readable) return; + if (!this.readable) { + if (cb) process.nextTick(function() { cb(null); }); + return; + } this.readable = false; function close() { @@ -1570,7 +1573,10 @@ WriteStream.prototype.end = function(data, encoding, cb) { WriteStream.prototype.destroy = function(cb) { var self = this; - if (!this.writable) return; + if (!this.writable) { + if (cb) process.nextTick(function() { cb(null); }); + return; + } this.writable = false; function close() { diff --git a/test/simple/test-fs-read-stream.js b/test/simple/test-fs-read-stream.js index dbb5fbf847..d500fc45ea 100644 --- a/test/simple/test-fs-read-stream.js +++ b/test/simple/test-fs-read-stream.js @@ -86,6 +86,11 @@ var file2 = fs.createReadStream(fn); file2.destroy(function(err) { assert.ok(!err); callbacks.destroy++; + + file2.destroy(function(err) { + assert.ok(!err); + callbacks.destroy++; + }); }); var file3 = fs.createReadStream(fn, {encoding: 'utf8'}); @@ -107,7 +112,7 @@ file3.on('close', function() { process.on('exit', function() { assert.equal(1, callbacks.open); assert.equal(1, callbacks.end); - assert.equal(1, callbacks.destroy); + assert.equal(2, callbacks.destroy); assert.equal(2, callbacks.close);