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:
parent
23f09d7e02
commit
f1fba8d1f5
10
lib/fs.js
10
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() {
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user