From f1fba8d1f5e7411f055c00ca4b46646e5b840cf2 Mon Sep 17 00:00:00 2001 From: Gil Pedersen Date: Wed, 1 Aug 2012 16:04:28 +0200 Subject: [PATCH] fs: fix ReadStream / WriteStream missing callback The (undocumented) callback argument to .destroy() was not called if the stream was no longer readable / writable. --- lib/fs.js | 10 ++++++++-- test/simple/test-fs-read-stream.js | 7 ++++++- 2 files changed, 14 insertions(+), 3 deletions(-) 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);