Browse Source

Fixes #1726, hack to unref process.stdout

v0.7.4-release
Ryan Dahl 14 years ago
parent
commit
0f8f863043
  1. 17
      src/node.js
  2. 12
      src/node_stdio.cc

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.

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

Loading…
Cancel
Save