diff options
author | Ben Noordhuis <info@bnoordhuis.nl> | 2013-03-21 14:59:16 +0100 |
---|---|---|
committer | Ben Noordhuis <info@bnoordhuis.nl> | 2013-03-21 14:59:16 +0100 |
commit | e47a3e3ff4436b5d58ec95bb7588f3f185cc4fa8 (patch) | |
tree | 78610bfd6c2b8104b93283df6145190cac65f3c0 /deps | |
parent | 3dd7938c03389371ce1d142a8558a98b450ca2ee (diff) | |
download | node-e47a3e3ff4436b5d58ec95bb7588f3f185cc4fa8.tar.gz |
deps: upgrade libuv to 9b61939
Diffstat (limited to 'deps')
-rw-r--r-- | deps/uv/build.mk | 6 | ||||
-rw-r--r-- | deps/uv/config-unix.mk | 20 | ||||
-rw-r--r-- | deps/uv/src/unix/timer.c | 18 | ||||
-rw-r--r-- | deps/uv/test/test-list.h | 6 | ||||
-rw-r--r-- | deps/uv/test/test-timer.c | 64 |
5 files changed, 98 insertions, 16 deletions
diff --git a/deps/uv/build.mk b/deps/uv/build.mk index 91886f0e7..1986e7824 100644 --- a/deps/uv/build.mk +++ b/deps/uv/build.mk @@ -18,17 +18,17 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. -OS ?= $(shell sh -c 'uname -s | tr "[A-Z]" "[a-z]"') +PLATFORM ?= $(shell sh -c 'uname -s | tr "[A-Z]" "[a-z]"') CPPFLAGS += -I$(SRCDIR)/include -I$(SRCDIR)/include/uv-private -ifeq (darwin,$(OS)) +ifeq (darwin,$(PLATFORM)) SOEXT = dylib else SOEXT = so endif -ifneq (,$(findstring mingw,$(OS))) +ifneq (,$(findstring mingw,$(PLATFORM))) include $(SRCDIR)/config-mingw.mk else include $(SRCDIR)/config-unix.mk diff --git a/deps/uv/config-unix.mk b/deps/uv/config-unix.mk index efe0d17ef..b5eeec1d3 100644 --- a/deps/uv/config-unix.mk +++ b/deps/uv/config-unix.mk @@ -54,7 +54,7 @@ OBJS += src/fs-poll.o OBJS += src/uv-common.o OBJS += src/inet.o -ifeq (sunos,$(OS)) +ifeq (sunos,$(PLATFORM)) CPPFLAGS += -D__EXTENSIONS__ -D_XOPEN_SOURCE=500 LDFLAGS+=-lkstat -lnsl -lsendfile -lsocket # Library dependencies are not transitive. @@ -62,13 +62,13 @@ RUNNER_LDFLAGS += $(LDFLAGS) OBJS += src/unix/sunos.o endif -ifeq (aix,$(OS)) +ifeq (aix,$(PLATFORM)) CPPFLAGS += -D_ALL_SOURCE -D_XOPEN_SOURCE=500 LDFLAGS+= -lperfstat OBJS += src/unix/aix.o endif -ifeq (darwin,$(OS)) +ifeq (darwin,$(PLATFORM)) CPPFLAGS += -D_DARWIN_USE_64_BIT_INODE=1 LDFLAGS += -framework Foundation \ -framework CoreServices \ @@ -82,7 +82,7 @@ OBJS += src/unix/proctitle.o OBJS += src/unix/darwin-proctitle.o endif -ifeq (linux,$(OS)) +ifeq (linux,$(PLATFORM)) CSTDFLAG += -D_GNU_SOURCE LDFLAGS+=-ldl -lrt RUNNER_CFLAGS += -D_GNU_SOURCE @@ -92,38 +92,38 @@ OBJS += src/unix/linux-core.o \ src/unix/proctitle.o endif -ifeq (freebsd,$(OS)) +ifeq (freebsd,$(PLATFORM)) LDFLAGS+=-lkvm OBJS += src/unix/freebsd.o OBJS += src/unix/kqueue.o endif -ifeq (dragonfly,$(OS)) +ifeq (dragonfly,$(PLATFORM)) LDFLAGS+=-lkvm OBJS += src/unix/freebsd.o OBJS += src/unix/kqueue.o endif -ifeq (netbsd,$(OS)) +ifeq (netbsd,$(PLATFORM)) LDFLAGS+=-lkvm OBJS += src/unix/netbsd.o OBJS += src/unix/kqueue.o endif -ifeq (openbsd,$(OS)) +ifeq (openbsd,$(PLATFORM)) LDFLAGS+=-lkvm OBJS += src/unix/openbsd.o OBJS += src/unix/kqueue.o endif -ifneq (,$(findstring cygwin,$(OS))) +ifneq (,$(findstring cygwin,$(PLATFORM))) # We drop the --std=c89, it hides CLOCK_MONOTONIC on cygwin CSTDFLAG = -D_GNU_SOURCE LDFLAGS+= OBJS += src/unix/cygwin.o endif -ifeq (sunos,$(OS)) +ifeq (sunos,$(PLATFORM)) RUNNER_LDFLAGS += -pthreads else RUNNER_LDFLAGS += -pthread diff --git a/deps/uv/src/unix/timer.c b/deps/uv/src/unix/timer.c index 41038c8ac..57d32f581 100644 --- a/deps/uv/src/unix/timer.c +++ b/deps/uv/src/unix/timer.c @@ -21,6 +21,8 @@ #include "uv.h" #include "internal.h" #include <assert.h> +#include <limits.h> + static int uv__timer_cmp(const uv_timer_t* a, const uv_timer_t* b) { if (a->timeout < b->timeout) @@ -45,6 +47,7 @@ RB_GENERATE_STATIC(uv__timers, uv_timer_s, tree_entry, uv__timer_cmp) int uv_timer_init(uv_loop_t* loop, uv_timer_t* handle) { uv__handle_init(loop, (uv_handle_t*)handle, UV_TIMER); handle->timer_cb = NULL; + handle->repeat = 0; return 0; } @@ -54,11 +57,17 @@ int uv_timer_start(uv_timer_t* handle, uv_timer_cb cb, uint64_t timeout, uint64_t repeat) { + uint64_t clamped_timeout; + if (uv__is_active(handle)) uv_timer_stop(handle); + clamped_timeout = handle->loop->time + timeout; + if (clamped_timeout < timeout) + clamped_timeout = (uint64_t) -1; + handle->timer_cb = cb; - handle->timeout = handle->loop->time + timeout; + handle->timeout = clamped_timeout; handle->repeat = repeat; /* start_id is the second index to be compared in uv__timer_cmp() */ handle->start_id = handle->loop->timer_counter++; @@ -106,6 +115,7 @@ uint64_t uv_timer_get_repeat(const uv_timer_t* handle) { int uv__next_timeout(const uv_loop_t* loop) { const uv_timer_t* handle; + uint64_t diff; /* RB_MIN expects a non-const tree root. That's okay, it doesn't modify it. */ handle = RB_MIN(uv__timers, (struct uv__timers*) &loop->timer_handles); @@ -116,7 +126,11 @@ int uv__next_timeout(const uv_loop_t* loop) { if (handle->timeout <= loop->time) return 0; - return handle->timeout - loop->time; + diff = handle->timeout - loop->time; + if (diff > INT_MAX) + diff = INT_MAX; + + return diff; } diff --git a/deps/uv/test/test-list.h b/deps/uv/test/test-list.h index 2341463a1..016f62711 100644 --- a/deps/uv/test/test-list.h +++ b/deps/uv/test/test-list.h @@ -95,9 +95,12 @@ TEST_DECLARE (shutdown_eof) TEST_DECLARE (callback_stack) TEST_DECLARE (error_message) TEST_DECLARE (timer) +TEST_DECLARE (timer_init) TEST_DECLARE (timer_again) TEST_DECLARE (timer_start_twice) TEST_DECLARE (timer_order) +TEST_DECLARE (timer_huge_timeout) +TEST_DECLARE (timer_huge_repeat) TEST_DECLARE (idle_starvation) TEST_DECLARE (loop_handles) TEST_DECLARE (get_loadavg) @@ -336,9 +339,12 @@ TASK_LIST_START TEST_ENTRY (error_message) TEST_ENTRY (timer) + TEST_ENTRY (timer_init) TEST_ENTRY (timer_again) TEST_ENTRY (timer_start_twice) TEST_ENTRY (timer_order) + TEST_ENTRY (timer_huge_timeout) + TEST_ENTRY (timer_huge_repeat) TEST_ENTRY (idle_starvation) diff --git a/deps/uv/test/test-timer.c b/deps/uv/test/test-timer.c index 60b080d28..6aa288978 100644 --- a/deps/uv/test/test-timer.c +++ b/deps/uv/test/test-timer.c @@ -28,8 +28,10 @@ static int once_close_cb_called = 0; static int repeat_cb_called = 0; static int repeat_close_cb_called = 0; static int order_cb_called = 0; - static uint64_t start_time; +static uv_timer_t tiny_timer; +static uv_timer_t huge_timer1; +static uv_timer_t huge_timer2; static void once_close_cb(uv_handle_t* handle) { @@ -156,6 +158,18 @@ TEST_IMPL(timer_start_twice) { } +TEST_IMPL(timer_init) { + uv_timer_t handle; + + ASSERT(0 == uv_timer_init(uv_default_loop(), &handle)); + ASSERT(0 == uv_timer_get_repeat(&handle)); + ASSERT(!uv_is_active((uv_handle_t*)&handle)); + + MAKE_VALGRIND_HAPPY(); + return 0; +} + + static void order_cb_a(uv_timer_t *handle, int status) { ASSERT(order_cb_called++ == *(int*)handle->data); } @@ -200,5 +214,53 @@ TEST_IMPL(timer_order) { ASSERT(order_cb_called == 2); + MAKE_VALGRIND_HAPPY(); + return 0; +} + + +static void tiny_timer_cb(uv_timer_t* handle, int status) { + ASSERT(handle == &tiny_timer); + uv_close((uv_handle_t*) &tiny_timer, NULL); + uv_close((uv_handle_t*) &huge_timer1, NULL); + uv_close((uv_handle_t*) &huge_timer2, NULL); +} + + +TEST_IMPL(timer_huge_timeout) { + ASSERT(0 == uv_timer_init(uv_default_loop(), &tiny_timer)); + ASSERT(0 == uv_timer_init(uv_default_loop(), &huge_timer1)); + ASSERT(0 == uv_timer_init(uv_default_loop(), &huge_timer2)); + ASSERT(0 == uv_timer_start(&tiny_timer, tiny_timer_cb, 1, 0)); + ASSERT(0 == uv_timer_start(&huge_timer1, tiny_timer_cb, 0xffffffffffffLL, 0)); + ASSERT(0 == uv_timer_start(&huge_timer2, tiny_timer_cb, (uint64_t) -1, 0)); + ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); + MAKE_VALGRIND_HAPPY(); + return 0; +} + + +static void huge_repeat_cb(uv_timer_t* handle, int status) { + static int ncalls; + + if (ncalls == 0) + ASSERT(handle == &huge_timer1); + else + ASSERT(handle == &tiny_timer); + + if (++ncalls == 10) { + uv_close((uv_handle_t*) &tiny_timer, NULL); + uv_close((uv_handle_t*) &huge_timer1, NULL); + } +} + + +TEST_IMPL(timer_huge_repeat) { + ASSERT(0 == uv_timer_init(uv_default_loop(), &tiny_timer)); + ASSERT(0 == uv_timer_init(uv_default_loop(), &huge_timer1)); + ASSERT(0 == uv_timer_start(&tiny_timer, huge_repeat_cb, 2, 2)); + ASSERT(0 == uv_timer_start(&huge_timer1, huge_repeat_cb, 1, (uint64_t) -1)); + ASSERT(0 == uv_run(uv_default_loop(), UV_RUN_DEFAULT)); + MAKE_VALGRIND_HAPPY(); return 0; } |