fs: fix ReadStream / WriteStream missing callback

The (undocumented) callback argument to .destroy() was not called if the
stream was no longer readable / writable.
This commit is contained in:
Gil Pedersen 2012-08-01 16:04:28 +02:00 committed by Ben Noordhuis
parent 23f09d7e02
commit f1fba8d1f5
2 changed files with 14 additions and 3 deletions

View File

@ -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() {

View 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);