diff --git a/config-unix.mk b/config-unix.mk index ce98c1f0..c1ba2d0a 100644 --- a/config-unix.mk +++ b/config-unix.mk @@ -33,6 +33,7 @@ OBJS += src/unix/dl.o OBJS += src/unix/error.o OBJS += src/unix/fs.o OBJS += src/unix/loop.o +OBJS += src/unix/loop-watcher.o OBJS += src/unix/pipe.o OBJS += src/unix/poll.o OBJS += src/unix/process.o diff --git a/src/unix/loop-watcher.c b/src/unix/loop-watcher.c new file mode 100644 index 00000000..6e6a6890 --- /dev/null +++ b/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) diff --git a/src/unix/loop.c b/src/unix/loop.c index 08b34994..14743daa 100644 --- a/src/unix/loop.c +++ b/src/unix/loop.c @@ -77,40 +77,3 @@ void uv__loop_delete(uv_loop_t* loop) { close(loop->fs_fd); #endif } - - -#define X(name, type) \ - int uv_##name##_init(uv_loop_t* loop, uv_##name##_t* handle) { \ - uv__handle_init(loop, (uv_handle_t*)handle, 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); \ - } -X(idle, UV_IDLE) -X(check, UV_CHECK) -X(prepare, UV_PREPARE) -#undef X diff --git a/uv.gyp b/uv.gyp index 236d2cb1..605b5b1c 100644 --- a/uv.gyp +++ b/uv.gyp @@ -195,6 +195,7 @@ 'src/unix/fs.c', 'src/unix/internal.h', 'src/unix/loop.c', + 'src/unix/loop-watcher.c', 'src/unix/pipe.c', 'src/unix/poll.c', 'src/unix/process.c',