Browse Source

deps: upgrade libuv to 28766dc

v0.9.1-release
Ben Noordhuis 13 years ago
parent
commit
578f69bcf4
  1. 4
      deps/uv/src/unix/internal.h
  2. 63
      deps/uv/src/unix/loop-watcher.c
  3. 67
      deps/uv/test/benchmark-loop-count.c
  4. 2
      deps/uv/test/test-list.h
  5. 1
      deps/uv/uv.gyp

4
deps/uv/src/unix/internal.h

@ -126,8 +126,8 @@ inline static void uv__req_init(uv_loop_t* loop,
/* core */ /* core */
void uv__handle_init(uv_loop_t* loop, uv_handle_t* handle, uv_handle_type type); void uv__handle_init(uv_loop_t* loop, uv_handle_t* handle, uv_handle_type type);
int uv__nonblock(int fd, int set) __attribute__((unused)); int uv__nonblock(int fd, int set);
int uv__cloexec(int fd, int set) __attribute__((unused)); int uv__cloexec(int fd, int set);
int uv__socket(int domain, int type, int protocol); int uv__socket(int domain, int type, int protocol);
int uv__dup(int fd); int uv__dup(int fd);
int uv_async_stop(uv_async_t* handle); int uv_async_stop(uv_async_t* handle);

63
deps/uv/src/unix/loop-watcher.c

@ -0,0 +1,63 @@
/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/
#include "uv.h"
#include "internal.h"
#define UV_LOOP_WATCHER_DEFINE(name, type) \
int uv_##name##_init(uv_loop_t* loop, uv_##name##_t* handle) { \
uv__handle_init(loop, (uv_handle_t*)handle, UV_##type); \
loop->counters.name##_init++; \
handle->name##_cb = NULL; \
return 0; \
} \
\
int uv_##name##_start(uv_##name##_t* handle, uv_##name##_cb cb) { \
if (uv__is_active(handle)) return 0; \
ngx_queue_insert_head(&handle->loop->name##_handles, &handle->queue); \
handle->name##_cb = cb; \
uv__handle_start(handle); \
return 0; \
} \
\
int uv_##name##_stop(uv_##name##_t* handle) { \
if (!uv__is_active(handle)) return 0; \
ngx_queue_remove(&handle->queue); \
uv__handle_stop(handle); \
return 0; \
} \
\
void uv__run_##name(uv_loop_t* loop) { \
uv_##name##_t* h; \
ngx_queue_t* q; \
ngx_queue_foreach(q, &loop->name##_handles) { \
h = ngx_queue_data(q, uv_##name##_t, queue); \
if (h->name##_cb) h->name##_cb(h, 0); \
} \
} \
\
void uv__##name##_close(uv_##name##_t* handle) { \
uv_##name##_stop(handle); \
}
UV_LOOP_WATCHER_DEFINE(prepare, PREPARE)
UV_LOOP_WATCHER_DEFINE(check, CHECK)
UV_LOOP_WATCHER_DEFINE(idle, IDLE)

67
deps/uv/test/test-eio-overflow.c → deps/uv/test/benchmark-loop-count.c

@ -19,71 +19,40 @@
* IN THE SOFTWARE. * IN THE SOFTWARE.
*/ */
#include "uv.h"
#include "task.h" #include "task.h"
#include "uv.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
static unsigned long ticks;
static uv_idle_t idle_handle;
static uv_timer_t timer_handle;
static uv_idle_t idle;
static const int max_opened = 10000;
static const int max_delta = 4000;
static int opened = 0;
static int closed = 0;
static void idle_cb(uv_idle_t* handle, int status) {
void work_cb(uv_work_t* work) { ticks++;
/* continue as fast as possible */
} }
void after_work_cb(uv_work_t* work) { static void timer_cb(uv_timer_t* handle, int status) {
free(work); uv_idle_stop(&idle_handle);
closed++; uv_timer_stop(&timer_handle);
} }
void make_eio_req(void) { BENCHMARK_IMPL(loop_count) {
uv_work_t* w; uv_loop_t* loop = uv_default_loop();
opened++;
w = (uv_work_t*) malloc(sizeof(*w));
ASSERT(w != NULL);
uv_queue_work(uv_default_loop(), w, work_cb, after_work_cb);
}
void idle_cb(uv_idle_t* idle, int status) {
ASSERT(opened - closed < max_delta);
if (opened <= max_opened) {
int i;
for (i = 0; i < 30; i++) {
make_eio_req();
}
} else {
int r;
r = uv_idle_stop(idle);
ASSERT(r == 0);
}
}
TEST_IMPL(eio_overflow) { uv_timer_init(loop, &timer_handle);
int r; uv_timer_start(&timer_handle, timer_cb, 5000, 0);
r = uv_idle_init(uv_default_loop(), &idle); uv_idle_init(loop, &idle_handle);
ASSERT(r == 0); uv_idle_start(&idle_handle, idle_cb);
r = uv_idle_start(&idle, idle_cb); uv_run(loop);
ASSERT(r == 0);
r = uv_run(uv_default_loop()); LOGF("loop_count: %lu ticks (%.0f ticks/s)\n", ticks, ticks / 5.0);
ASSERT(r == 0);
return 0; return 0;
} }

2
deps/uv/test/test-list.h

@ -154,7 +154,6 @@ TEST_DECLARE (fs_open_dir)
TEST_DECLARE (fs_rename_to_existing_file) TEST_DECLARE (fs_rename_to_existing_file)
TEST_DECLARE (threadpool_queue_work_simple) TEST_DECLARE (threadpool_queue_work_simple)
TEST_DECLARE (threadpool_multiple_event_loops) TEST_DECLARE (threadpool_multiple_event_loops)
TEST_DECLARE (eio_overflow)
TEST_DECLARE (thread_mutex) TEST_DECLARE (thread_mutex)
TEST_DECLARE (thread_rwlock) TEST_DECLARE (thread_rwlock)
TEST_DECLARE (thread_create) TEST_DECLARE (thread_create)
@ -375,7 +374,6 @@ TASK_LIST_START
TEST_ENTRY (fs_rename_to_existing_file) TEST_ENTRY (fs_rename_to_existing_file)
TEST_ENTRY (threadpool_queue_work_simple) TEST_ENTRY (threadpool_queue_work_simple)
TEST_ENTRY (threadpool_multiple_event_loops) TEST_ENTRY (threadpool_multiple_event_loops)
TEST_ENTRY (eio_overflow)
TEST_ENTRY (thread_mutex) TEST_ENTRY (thread_mutex)
TEST_ENTRY (thread_rwlock) TEST_ENTRY (thread_rwlock)
TEST_ENTRY (thread_create) TEST_ENTRY (thread_create)

1
deps/uv/uv.gyp

@ -305,7 +305,6 @@
'test/test-connection-fail.c', 'test/test-connection-fail.c',
'test/test-cwd-and-chdir.c', 'test/test-cwd-and-chdir.c',
'test/test-delayed-accept.c', 'test/test-delayed-accept.c',
'test/test-eio-overflow.c',
'test/test-fail-always.c', 'test/test-fail-always.c',
'test/test-fs.c', 'test/test-fs.c',
'test/test-fs-event.c', 'test/test-fs-event.c',

Loading…
Cancel
Save