Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
Use net_uv instead of net_legacy for stdio
Browse files Browse the repository at this point in the history
Also temporary hack to prevent process.stdout from keeping event loop alive
by calling uv_unref on process.stdout initialization.
  • Loading branch information
ry committed Sep 13, 2011
1 parent 190abca commit 0aad61e
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 6 deletions.
2 changes: 1 addition & 1 deletion lib/tty_posix.js
Expand Up @@ -21,7 +21,7 @@


var binding = process.binding('stdio'),
net = require('net_legacy'), // FIXME
net = require('net'),
inherits = require('util').inherits;


Expand Down
4 changes: 3 additions & 1 deletion src/node.js
Expand Up @@ -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
Expand Down
20 changes: 20 additions & 0 deletions src/node_stdio.cc
Expand Up @@ -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;

Expand Down Expand Up @@ -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;
Expand Down
6 changes: 2 additions & 4 deletions test/simple/test-module-load-list.js
Expand Up @@ -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'
]);
}
Expand Down

0 comments on commit 0aad61e

Please sign in to comment.