Skip to content
Permalink
Browse files

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: #4083
Reviewed-By: Chris Dickinson <christopher.s.dickinson@gmail.com>
  • Loading branch information...
mscdex committed Mar 20, 2015
1 parent 49b5445 commit cc0342a517279c9c52543e3a37e11da3fc6cdb36
Showing with 25 additions and 1 deletion.
  1. +2 −1 lib/_stream_readable.js
  2. +1 −0 lib/_stream_writable.js
  3. +22 −0 test/parallel/test-stream2-compatibility.js
@@ -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');
});

0 comments on commit cc0342a

Please sign in to comment.
You can’t perform that action at this time.