mirror of
https://github.com/nodejs/node.git
synced 2024-12-01 16:10:02 +01:00
streams: update .readable/.writable to false
These properties were initially used to determine stream status back in node v0.8 and earlier. Since streams2 however, these properties were *always* true, which can be misleading for example if you are trying to immediately determine whether a Writable stream is still writable or not (to avoid a "write after end" exception). PR-URL: https://github.com/nodejs/node/pull/4083 Reviewed-By: Chris Dickinson <christopher.s.dickinson@gmail.com>
This commit is contained in:
parent
49b5445cbc
commit
cc0342a517
@ -385,6 +385,7 @@ function onEofChunk(stream, state) {
|
||||
}
|
||||
}
|
||||
state.ended = true;
|
||||
stream.readable = false;
|
||||
|
||||
// emit 'readable' now to make sure it gets picked up.
|
||||
emitReadable(stream);
|
||||
@ -670,7 +671,7 @@ Readable.prototype.on = function(ev, fn) {
|
||||
this.resume();
|
||||
}
|
||||
|
||||
if (ev === 'readable' && this.readable) {
|
||||
if (ev === 'readable' && !this._readableState.endEmitted) {
|
||||
var state = this._readableState;
|
||||
if (!state.readableListening) {
|
||||
state.readableListening = true;
|
||||
|
@ -483,4 +483,5 @@ function endWritable(stream, state, cb) {
|
||||
stream.once('finish', cb);
|
||||
}
|
||||
state.ended = true;
|
||||
stream.writable = false;
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
'use strict';
|
||||
var common = require('../common');
|
||||
var R = require('_stream_readable');
|
||||
var W = require('_stream_writable');
|
||||
var assert = require('assert');
|
||||
|
||||
var util = require('util');
|
||||
@ -29,4 +30,25 @@ var reader = new TestReader();
|
||||
setImmediate(function() {
|
||||
assert.equal(ondataCalled, 1);
|
||||
console.log('ok');
|
||||
reader.push(null);
|
||||
});
|
||||
|
||||
function TestWriter() {
|
||||
W.apply(this);
|
||||
this.write('foo');
|
||||
this.end();
|
||||
}
|
||||
|
||||
util.inherits(TestWriter, W);
|
||||
|
||||
TestWriter.prototype._write = function(chunk, enc, cb) {
|
||||
cb();
|
||||
};
|
||||
|
||||
var writer = new TestWriter();
|
||||
|
||||
process.on('exit', function() {
|
||||
assert.strictEqual(reader.readable, false);
|
||||
assert.strictEqual(writer.writable, false);
|
||||
console.log('ok');
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user