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
Ryan Dahl 2011-09-12 17:19:09 -07:00
parent 190abcac9d
commit 0aad61e802
4 changed files with 26 additions and 6 deletions

View File

@ -21,7 +21,7 @@
var binding = process.binding('stdio'),
net = require('net_legacy'), // FIXME
net = require('net'),
inherits = require('util').inherits;

View File

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

View File

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

View File

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