var binding = process.binding('stdio'),
- net = require('net_legacy'), // FIXME
+ net = require('net'),
inherits = require('util').inherits;
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
}
+// 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;
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;
// 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'
]);
}