diff --git a/lib/tty_posix.js b/lib/tty_posix.js index 0bb0eb840eb..49879a94d48 100644 --- a/lib/tty_posix.js +++ b/lib/tty_posix.js @@ -35,6 +35,12 @@ function ReadStream(fd) { if (!(this instanceof ReadStream)) return new ReadStream(fd); net.Socket.call(this, fd); + if (this._writeWatcher) { + this._writeWatcher.stop(); + this._writeWatcher = null; + } + this.writable = false; + var self = this, keypressListeners = this.listeners('keypress'); @@ -285,6 +291,12 @@ ReadStream.prototype._emitKey = function(s) { function WriteStream(fd) { if (!(this instanceof WriteStream)) return new WriteStream(fd); net.Socket.call(this, fd); + + if (this._readWatcher) { + this._readWatcher.stop(); + this._readWatcher = null; + } + this.readable = false; } inherits(WriteStream, net.Socket); exports.WriteStream = WriteStream; diff --git a/test/disabled/test-tty-stdio.js b/test/disabled/test-tty-stdio.js new file mode 100644 index 00000000000..0d963958abb --- /dev/null +++ b/test/disabled/test-tty-stdio.js @@ -0,0 +1,12 @@ +// Can't test this when 'make test' doesn't assign a tty to the stdout. +var common = require('../common'); +var assert = require('assert'); +var tty = require('tty'); + +assert.ok(process.stdin instanceof tty.ReadStream); +assert.ok(process.stdin.readable); +assert.ok(!process.stdin.writable); + +assert.ok(process.stdout instanceof tty.WriteStream); +assert.ok(!process.stdout.readable); +assert.ok(process.stdout.writable); diff --git a/test/simple/test-tty-stdout-end.js b/test/simple/test-tty-stdout-end.js new file mode 100644 index 00000000000..9b9f34f69c0 --- /dev/null +++ b/test/simple/test-tty-stdout-end.js @@ -0,0 +1,14 @@ +// Can't test this when 'make test' doesn't assign a tty to the stdout. +var common = require('../common'); +var assert = require('assert'); +var tty = require('tty'); + +var closed = false; +process.stdout.on('close', function() { + closed = true; +}); +process.on('exit', function() { + assert.ok(closed); +}); + +process.stdout.end();