mirror of https://github.com/nodejs/node.git
Use net_uv instead of net_legacy for stdio
Also temporary hack to prevent process.stdout from keeping event loop alive by calling uv_unref on process.stdout initialization.v0.7.4-release
parent
190abcac9d
commit
0aad61e802
|
@ -21,7 +21,7 @@
|
|||
|
||||
|
||||
var binding = process.binding('stdio'),
|
||||
net = require('net_legacy'), // FIXME
|
||||
net = require('net'),
|
||||
inherits = require('util').inherits;
|
||||
|
||||
|
||||
|
|
|
@ -221,17 +221,19 @@
|
|||
var binding = process.binding('stdio'),
|
||||
// FIXME Remove conditional when net is supported again on windows.
|
||||
net = (process.platform !== "win32")
|
||||
? NativeModule.require('net_legacy') // fixme!
|
||||
? NativeModule.require('net')
|
||||
: undefined,
|
||||
fs = NativeModule.require('fs'),
|
||||
tty = NativeModule.require('tty'),
|
||||
fd = binding.stdoutFD;
|
||||
|
||||
if (binding.isatty(fd)) {
|
||||
binding.unref();
|
||||
stdout = new tty.WriteStream(fd);
|
||||
} else if (binding.isStdoutBlocking()) {
|
||||
stdout = new fs.WriteStream(null, {fd: fd});
|
||||
} else {
|
||||
binding.unref();
|
||||
stdout = new net.Stream(fd);
|
||||
// FIXME Should probably have an option in net.Stream to create a
|
||||
// stream from an existing fd which is writable only. But for now
|
||||
|
|
|
@ -191,6 +191,24 @@ static Handle<Value> WriteError (const Arguments& args) {
|
|||
}
|
||||
|
||||
|
||||
// This exists to prevent process.stdout from keeping the event loop alive.
|
||||
// It is only ever called in src/node.js during the initalization of
|
||||
// process.stdout and will fail if called more than once. We do not want to
|
||||
// expose uv_ref and uv_unref to javascript in general.
|
||||
// This should be removed in the future!
|
||||
static bool unref_called = false;
|
||||
static Handle<Value> Unref(const Arguments& args) {
|
||||
HandleScope scope;
|
||||
|
||||
assert(unref_called == false);
|
||||
|
||||
uv_unref(uv_default_loop());
|
||||
unref_called = true;
|
||||
|
||||
return Null();
|
||||
}
|
||||
|
||||
|
||||
static Handle<Value> OpenStdin(const Arguments& args) {
|
||||
HandleScope scope;
|
||||
|
||||
|
@ -318,6 +336,8 @@ void Stdio::Initialize(v8::Handle<v8::Object> target) {
|
|||
NODE_SET_METHOD(target, "isatty", IsATTY);
|
||||
NODE_SET_METHOD(target, "openpty", OpenPTY);
|
||||
|
||||
NODE_SET_METHOD(target, "unref", Unref);
|
||||
|
||||
struct sigaction sa;
|
||||
memset(&sa, 0, sizeof(sa));
|
||||
sa.sa_handler = HandleSIGCONT;
|
||||
|
|
|
@ -87,15 +87,13 @@ if (!process.features.uv) {
|
|||
// unix libuv backend.
|
||||
expected = expected.concat([
|
||||
'NativeModule console',
|
||||
'NativeModule net_legacy',
|
||||
'NativeModule net_uv',
|
||||
'NativeModule timers_uv',
|
||||
'Binding timer_wrap',
|
||||
'NativeModule _linklist',
|
||||
'Binding net',
|
||||
'NativeModule freelist',
|
||||
'Binding io_watcher',
|
||||
'NativeModule tty',
|
||||
'NativeModule tty_posix',
|
||||
'Binding pipe_wrap',
|
||||
'NativeModule readline'
|
||||
]);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue