Skip to content
Browse files

Fixes #1726, hack to unref process.stdout

  • Loading branch information...
1 parent abfcd1f commit 0f8f8630433a0f33906bcb673b606a0e7843bee7 @ry ry committed
Showing with 26 additions and 3 deletions.
  1. +14 −3 src/node.js
  2. +12 −0 src/node_stdio.cc
View
17 src/node.js
@@ -229,20 +229,31 @@
// Note stdout._type is used for test-module-load-list.js
if (binding.isatty(fd)) {
- binding.unref();
var tty = NativeModule.require('tty');
stdout = new tty.WriteStream(fd);
stdout._type = "tty";
+
+ // FIXME Hack to have stdout not keep the event loop alive.
+ // See https://github.com/joyent/node/issues/1726
+ binding.unref();
+ stdout.on('close', function() {
+ binding.ref();
+ });
} else if (binding.isStdoutBlocking()) {
var fs = NativeModule.require('fs');
stdout = new fs.WriteStream(null, {fd: fd});
stdout._type = "fs";
} else {
- binding.unref();
-
var net = NativeModule.require('net');
stdout = new net.Stream(fd);
+ // FIXME Hack to have stdout not keep the event loop alive.
+ // See https://github.com/joyent/node/issues/1726
+ binding.unref();
+ stdout.on('close', function() {
+ binding.ref();
+ });
+
// FIXME Should probably have an option in net.Stream to create a
// stream from an existing fd which is writable only. But for now
// we'll just add this hack and set the `readable` member to false.
View
12 src/node_stdio.cc
@@ -209,6 +209,17 @@ static Handle<Value> Unref(const Arguments& args) {
}
+static Handle<Value> Ref(const Arguments& args) {
+ HandleScope scope;
+
+ assert(unref_called == true);
+
+ uv_ref(uv_default_loop());
+
+ return Null();
+}
+
+
static Handle<Value> OpenStdin(const Arguments& args) {
HandleScope scope;
@@ -337,6 +348,7 @@ void Stdio::Initialize(v8::Handle<v8::Object> target) {
NODE_SET_METHOD(target, "openpty", OpenPTY);
NODE_SET_METHOD(target, "unref", Unref);
+ NODE_SET_METHOD(target, "ref", Ref);
struct sigaction sa;
memset(&sa, 0, sizeof(sa));

0 comments on commit 0f8f863

Please sign in to comment.
Something went wrong with that request. Please try again.