0
0
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:
Brian White 2015-03-19 22:04:07 -04:00
parent 49b5445cbc
commit cc0342a517
3 changed files with 25 additions and 1 deletions

View File

@ -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;

View File

@ -483,4 +483,5 @@ function endWritable(stream, state, cb) {
stream.once('finish', cb);
}
state.ended = true;
stream.writable = false;
}

View File

@ -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');
});