From 77145ba22945892a38be53109ed95e04709bfe8e Mon Sep 17 00:00:00 2001
From: Ryan Dahl
Date: Sun, 7 Feb 2010 16:51:20 -0800
Subject: [PATCH 01/15] Throw errors from server.listen()
---
src/node_net.cc | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/node_net.cc b/src/node_net.cc
index 5b39ae23bd..dad2906d64 100644
--- a/src/node_net.cc
+++ b/src/node_net.cc
@@ -821,6 +821,14 @@ Handle Server::Listen(const Arguments& args) {
if (address_list) freeaddrinfo(address_list);
+ if (server->server_.errorno) {
+ Local e = Exception::Error(
+ String::NewSymbol(strerror(server->server_.errorno)));
+ Local
- 2010.02.03
+ 2010.02.09
node-v0.1.27.tar.gz
+ href="http://s3.amazonaws.com/four.livejournal/20100209/node-v0.1.28.tar.gz">node-v0.1.28.tar.gz
Build
diff --git a/wscript b/wscript
index 92a6c199b9..b7cf73781d 100644
--- a/wscript
+++ b/wscript
@@ -7,7 +7,7 @@ from os.path import join, dirname, abspath
from logging import fatal
cwd = os.getcwd()
-VERSION="0.1.27"
+VERSION="0.1.28"
APPNAME="node.js"
import js2c
From 88b935928419819a6547e30dd2c8fa68fa815291 Mon Sep 17 00:00:00 2001
From: Ryan Dahl
Date: Tue, 9 Feb 2010 14:11:58 -0800
Subject: [PATCH 12/15] Fix stderr flushing problem
---
src/node_stdio.cc | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/src/node_stdio.cc b/src/node_stdio.cc
index adcaff2557..cda79e3a93 100644
--- a/src/node_stdio.cc
+++ b/src/node_stdio.cc
@@ -4,6 +4,8 @@
#include
#include
+#include
+#include
using namespace v8;
using namespace node;
@@ -42,6 +44,15 @@ EmitClose (void)
emit->Call(stdio, 1, argv);
}
+
+static inline Local errno_exception(int errorno) {
+ Local e = Exception::Error(String::NewSymbol(strerror(errorno)));
+ Local obj = e->ToObject();
+ obj->Set(String::NewSymbol("errno"), Integer::New(errorno));
+ return e;
+}
+
+
/* STDERR IS ALWAY SYNC */
static Handle
WriteError (const Arguments& args)
@@ -53,8 +64,13 @@ WriteError (const Arguments& args)
String::Utf8Value msg(args[0]->ToString());
- fprintf(stderr, "%s", *msg);
- fflush(stderr);
+ ssize_t r;
+ size_t written = 0;
+ while (written < msg.length()) {
+ r = write(STDERR_FILENO, (*msg) + written, msg.length() - written);
+ if (r < 0) return ThrowException(errno_exception(errno));
+ written += (size_t)r;
+ }
return Undefined();
}
From 3eaaaffadb85fd6187bdfaaffc6c0ab414a89a3a Mon Sep 17 00:00:00 2001
From: Ryan Dahl
Date: Tue, 9 Feb 2010 14:42:56 -0800
Subject: [PATCH 13/15] Ignore EAGAIN in stderr dumps.
(Going out of the way to be sync)
---
src/node_stdio.cc | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/node_stdio.cc b/src/node_stdio.cc
index cda79e3a93..2b5b30612c 100644
--- a/src/node_stdio.cc
+++ b/src/node_stdio.cc
@@ -68,7 +68,13 @@ WriteError (const Arguments& args)
size_t written = 0;
while (written < msg.length()) {
r = write(STDERR_FILENO, (*msg) + written, msg.length() - written);
- if (r < 0) return ThrowException(errno_exception(errno));
+ if (r < 0) {
+ if (errno == EAGAIN || errno == EIO) {
+ usleep(100);
+ continue;
+ }
+ return ThrowException(errno_exception(errno));
+ }
written += (size_t)r;
}
From 9f6f19df1bab8bd3bad0ec00ed0489957c7cfacf Mon Sep 17 00:00:00 2001
From: Michael Stillwell
Date: Tue, 9 Feb 2010 22:32:52 +0000
Subject: [PATCH 14/15] Add test: modifying event listeners during callback.
---
.../test-event-emitter-modify-in-emit.js | 32 +++++++++++++++++++
1 file changed, 32 insertions(+)
create mode 100644 test/mjsunit/test-event-emitter-modify-in-emit.js
diff --git a/test/mjsunit/test-event-emitter-modify-in-emit.js b/test/mjsunit/test-event-emitter-modify-in-emit.js
new file mode 100644
index 0000000000..7bb2eb3292
--- /dev/null
+++ b/test/mjsunit/test-event-emitter-modify-in-emit.js
@@ -0,0 +1,32 @@
+process.mixin(require("./common"));
+var events = require('events');
+
+var callbacks_called = [ ];
+
+var e = new events.EventEmitter();
+
+function callback1() {
+ callbacks_called.push("callback1");
+ e.addListener("foo", callback2);
+ e.removeListener("foo", callback1);
+}
+
+function callback2() {
+ callbacks_called.push("callback2");
+ e.removeListener("foo", callback2);
+}
+
+e.addListener("foo", callback1);
+assert.equal(1, e.listeners("foo").length);
+
+e.emit("foo");
+assert.equal(1, e.listeners("foo").length);
+assert.deepEqual(["callback1"], callbacks_called);
+
+e.emit("foo");
+assert.equal(0, e.listeners("foo").length);
+assert.deepEqual(["callback1", "callback2"], callbacks_called);
+
+e.emit("foo");
+assert.equal(0, e.listeners("foo").length);
+assert.deepEqual(["callback1", "callback2"], callbacks_called);
From 3337e9da1ae6989c1815b02ad639cf9381a08db0 Mon Sep 17 00:00:00 2001
From: masuidrive
Date: Wed, 10 Feb 2010 02:21:54 -0800
Subject: [PATCH 15/15] Build system: support spaces in directory names
---
wscript | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/wscript b/wscript
index b7cf73781d..5800ff76db 100644
--- a/wscript
+++ b/wscript
@@ -91,7 +91,7 @@ def conf_subproject (conf, subdir, command=None):
copytree(src, default_tgt, True)
if command:
- if os.system("cd %s && %s" % (default_tgt, command)) != 0:
+ if os.system("cd \"%s\" && %s" % (default_tgt, command)) != 0:
conf.fatal("Configuring %s failed." % (subdir))
debug_tgt = join(conf.blddir, "debug", subdir)
@@ -191,7 +191,7 @@ def build_udns(bld):
static_lib = bld.env["staticlib_PATTERN"] % "udns"
- rule = 'cd %s && make'
+ rule = 'cd "%s" && make'
default = bld.new_task_gen(
target= join("deps/udns", static_lib),
@@ -234,7 +234,7 @@ def v8_cmd(bld, variant):
else:
mode = "debug"
- cmd_R = 'python %s -C %s -Y %s visibility=default mode=%s %s library=static snapshot=on'
+ cmd_R = 'python "%s" -C "%s" -Y "%s" visibility=default mode=%s %s library=static snapshot=on'
cmd = cmd_R % ( scons
, bld.srcnode.abspath(bld.env_of_name(variant))