summaryrefslogtreecommitdiff
path: root/deps/uv/src/unix/core.c
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2015-01-05 20:44:25 +0100
committerBen Noordhuis <info@bnoordhuis.nl>2015-01-05 22:25:20 +0100
commiteaed2a11ecf8d4f8a309f42d6bbc72306c01b755 (patch)
tree59abc7b7d4c1396c5bd60a47f13e694076b5b299 /deps/uv/src/unix/core.c
parent94e147500c5bf457c9101bda8c8020d8ff896708 (diff)
downloadandroid-node-v8-eaed2a11ecf8d4f8a309f42d6bbc72306c01b755.tar.gz
android-node-v8-eaed2a11ecf8d4f8a309f42d6bbc72306c01b755.tar.bz2
android-node-v8-eaed2a11ecf8d4f8a309f42d6bbc72306c01b755.zip
deps: update libuv to 1.2.0
PR-URL: https://github.com/iojs/io.js/pull/237 Reviewed-By: Bert Belder <bertbelder@gmail.com> Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
Diffstat (limited to 'deps/uv/src/unix/core.c')
-rw-r--r--deps/uv/src/unix/core.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/deps/uv/src/unix/core.c b/deps/uv/src/unix/core.c
index c08040e537..6f284ffa7a 100644
--- a/deps/uv/src/unix/core.c
+++ b/deps/uv/src/unix/core.c
@@ -74,7 +74,7 @@
#include <sys/ioctl.h>
#endif
-static void uv__run_pending(uv_loop_t* loop);
+static int uv__run_pending(uv_loop_t* loop);
/* Verify that uv_buf_t is ABI-compatible with struct iovec. */
STATIC_ASSERT(sizeof(uv_buf_t) == sizeof(struct iovec));
@@ -304,6 +304,7 @@ int uv_loop_alive(const uv_loop_t* loop) {
int uv_run(uv_loop_t* loop, uv_run_mode mode) {
int timeout;
int r;
+ int ran_pending;
r = uv__loop_alive(loop);
if (!r)
@@ -312,12 +313,12 @@ int uv_run(uv_loop_t* loop, uv_run_mode mode) {
while (r != 0 && loop->stop_flag == 0) {
uv__update_time(loop);
uv__run_timers(loop);
- uv__run_pending(loop);
+ ran_pending = uv__run_pending(loop);
uv__run_idle(loop);
uv__run_prepare(loop);
timeout = 0;
- if ((mode & UV_RUN_NOWAIT) == 0)
+ if ((mode == UV_RUN_ONCE && !ran_pending) || mode == UV_RUN_DEFAULT)
timeout = uv_backend_timeout(loop);
uv__io_poll(loop, timeout);
@@ -338,8 +339,7 @@ int uv_run(uv_loop_t* loop, uv_run_mode mode) {
}
r = uv__loop_alive(loop);
-
- if (mode & (UV_RUN_ONCE | UV_RUN_NOWAIT))
+ if (mode == UV_RUN_ONCE || mode == UV_RUN_NOWAIT)
break;
}
@@ -635,6 +635,11 @@ int uv_cwd(char* buffer, size_t* size) {
return -errno;
*size = strlen(buffer);
+ if (*size > 1 && buffer[*size - 1] == '/') {
+ buffer[*size-1] = '\0';
+ (*size)--;
+ }
+
return 0;
}
@@ -689,10 +694,13 @@ int uv_fileno(const uv_handle_t* handle, uv_os_fd_t* fd) {
}
-static void uv__run_pending(uv_loop_t* loop) {
+static int uv__run_pending(uv_loop_t* loop) {
QUEUE* q;
uv__io_t* w;
+ if (QUEUE_EMPTY(&loop->pending_queue))
+ return 0;
+
while (!QUEUE_EMPTY(&loop->pending_queue)) {
q = QUEUE_HEAD(&loop->pending_queue);
QUEUE_REMOVE(q);
@@ -701,6 +709,8 @@ static void uv__run_pending(uv_loop_t* loop) {
w = QUEUE_DATA(q, uv__io_t, pending_queue);
w->cb(loop, w, UV__POLLOUT);
}
+
+ return 1;
}