mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
throw from stdout.end and stderr.end
This commit is contained in:
@@ -54,7 +54,7 @@ Stream.prototype.pipe = function(dest, options) {
|
||||
// If the 'end' option is not supplied, dest.end() will be called when
|
||||
// source gets the 'end' or 'close' events. Only dest.end() once, and
|
||||
// only when all sources have ended.
|
||||
if (!options || options.end !== false) {
|
||||
if (!dest._isStdio && (!options || options.end !== false)) {
|
||||
dest._pipeCount = dest._pipeCount || 0;
|
||||
dest._pipeCount++;
|
||||
|
||||
|
||||
10
src/node.js
10
src/node.js
@@ -269,6 +269,8 @@
|
||||
// For supporting legacy API we put the FD here.
|
||||
stream.fd = fd;
|
||||
|
||||
stream._isStdio = true;
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
@@ -278,14 +280,18 @@
|
||||
process.__defineGetter__('stdout', function() {
|
||||
if (stdout) return stdout;
|
||||
stdout = createWritableStdioStream(1);
|
||||
stdout.end = stdout.destroy = stdout.destroySoon = function() { };
|
||||
stdout.end = stdout.destroy = stdout.destroySoon = function() {
|
||||
throw new Error('process.stdout cannot be closed');
|
||||
};
|
||||
return stdout;
|
||||
});
|
||||
|
||||
process.__defineGetter__('stderr', function() {
|
||||
if (stderr) return stderr;
|
||||
stderr = createWritableStdioStream(2);
|
||||
stderr.end = stderr.destroy = stderr.destroySoon = function() { };
|
||||
stderr.end = stderr.destroy = stderr.destroySoon = function() {
|
||||
throw new Error('process.stderr cannot be closed');
|
||||
};
|
||||
return stderr;
|
||||
});
|
||||
|
||||
|
||||
@@ -22,14 +22,15 @@
|
||||
// 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);
|
||||
});
|
||||
var exceptionCaught = false;
|
||||
|
||||
process.stdout.end();
|
||||
try {
|
||||
process.stdout.end();
|
||||
} catch(e) {
|
||||
exceptionCaught = true;
|
||||
assert.ok(common.isError(e));
|
||||
assert.equal('process.stdout cannot be closed', e.message);
|
||||
}
|
||||
|
||||
assert.ok(exceptionCaught);
|
||||
|
||||
Reference in New Issue
Block a user