fs: fix ReadStream / WriteStream missing callback
authorGil Pedersen <git@gpost.dk>
Wed, 1 Aug 2012 14:04:28 +0000 (16:04 +0200)
committerBen Noordhuis <info@bnoordhuis.nl>
Wed, 1 Aug 2012 23:25:53 +0000 (01:25 +0200)
The (undocumented) callback argument to .destroy() was not called if the
stream was no longer readable / writable.

lib/fs.js
test/simple/test-fs-read-stream.js

index d9d0740..d53c360 100644 (file)
--- 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() {
index dbb5fbf..d500fc4 100644 (file)
@@ -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);