diff options
author | Ben Noordhuis <info@bnoordhuis.nl> | 2012-05-17 07:13:29 +0200 |
---|---|---|
committer | Ben Noordhuis <info@bnoordhuis.nl> | 2012-05-22 16:14:24 +0200 |
commit | 039fac633eaf081a96bb1ed8bc7307d03dcbe9d9 (patch) | |
tree | b24085e8aab84e09ed8fd7d311cd360dbfd6259e /deps/uv/src/uv-common.h | |
parent | a608f65b2454a83f08a60ba24088a672097540f5 (diff) | |
download | android-node-v8-039fac633eaf081a96bb1ed8bc7307d03dcbe9d9.tar.gz android-node-v8-039fac633eaf081a96bb1ed8bc7307d03dcbe9d9.tar.bz2 android-node-v8-039fac633eaf081a96bb1ed8bc7307d03dcbe9d9.zip |
deps: upgrade libuv to a478847
The event loop's reference counting scheme in this version of libuv has changed.
Update the libuv bindings to reflect that fact.
Diffstat (limited to 'deps/uv/src/uv-common.h')
-rw-r--r-- | deps/uv/src/uv-common.h | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/deps/uv/src/uv-common.h b/deps/uv/src/uv-common.h index e82f584272..efc07601a9 100644 --- a/deps/uv/src/uv-common.h +++ b/deps/uv/src/uv-common.h @@ -27,11 +27,30 @@ #ifndef UV_COMMON_H_ #define UV_COMMON_H_ +#include <assert.h> + #include "uv.h" #include "tree.h" + #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) +#ifdef _MSC_VER +# define UNUSED /* empty */ +#else +# define UNUSED __attribute__((unused)) +#endif + + +#ifndef _WIN32 +enum { + UV__ACTIVE = 0x4000, + UV__REF = 0x8000 +}; +#else +# define UV__REF 0x00000020 +# define UV__ACTIVE 0x00000040 +#endif struct uv_ares_task_s { UV_HANDLE_FIELDS @@ -83,5 +102,105 @@ int uv__tcp_connect6(uv_connect_t* req, struct sockaddr_in6 address, uv_connect_cb cb); +#ifndef UV_LEAN_AND_MEAN + +UNUSED static int uv__has_active_handles(const uv_loop_t* loop) { + return !ngx_queue_empty(&loop->active_handles); +} + +UNUSED static int uv__has_active_reqs(const uv_loop_t* loop) { + return !ngx_queue_empty(&loop->active_reqs); +} + +UNUSED static void uv__active_handle_add(uv_handle_t* h) { + ngx_queue_insert_tail(&h->loop->active_handles, &h->active_queue); +} + +UNUSED static void uv__active_handle_rm(uv_handle_t* h) { + assert(uv__has_active_handles(h->loop)); + ngx_queue_remove(&h->active_queue); +} + +UNUSED static void uv__req_register(uv_loop_t* loop, uv_req_t* req) { + ngx_queue_insert_tail(&loop->active_reqs, &req->active_queue); +} + +UNUSED static void uv__req_unregister(uv_loop_t* loop, uv_req_t* req) { + assert(uv__has_active_reqs(loop)); + ngx_queue_remove(&req->active_queue); +} + +#else /* UV_LEAN_AND_MEAN */ + +UNUSED static int uv__has_active_handles(const uv_loop_t* loop) { + return loop->active_handles > 0; +} + +UNUSED static int uv__has_active_reqs(const uv_loop_t* loop) { + return loop->active_reqs > 0; +} + +UNUSED static void uv__active_handle_add(uv_handle_t* h) { + h->loop->active_handles++; +} + +UNUSED static void uv__active_handle_rm(uv_handle_t* h) { + assert(h->loop->active_handles > 0); + h->loop->active_handles--; +} + +UNUSED static void uv__req_register(uv_loop_t* loop, uv_req_t* req) { + loop->active_reqs++; + (void) req; +} + +UNUSED static void uv__req_unregister(uv_loop_t* loop, uv_req_t* req) { + assert(loop->active_reqs > 0); + loop->active_reqs--; + (void) req; +} + +#endif /* UV_LEAN_AND_MEAN */ + +#define uv__active_handle_add(h) uv__active_handle_add((uv_handle_t*)(h)) +#define uv__active_handle_rm(h) uv__active_handle_rm((uv_handle_t*)(h)) + +#define uv__req_register(loop, req) uv__req_register((loop), (uv_req_t*)(req)) +#define uv__req_unregister(loop, req) uv__req_unregister((loop), (uv_req_t*)(req)) + +UNUSED static int uv__is_active(const uv_handle_t* h) { + return !!(h->flags & UV__ACTIVE); +} +#define uv__is_active(h) uv__is_active((const uv_handle_t*)(h)) + +UNUSED static void uv__handle_start(uv_handle_t* h) { + if (h->flags & UV__ACTIVE) return; + if (!(h->flags & UV__REF)) return; + h->flags |= UV__ACTIVE; + uv__active_handle_add(h); +} +#define uv__handle_start(h) uv__handle_start((uv_handle_t*)(h)) + +UNUSED static void uv__handle_stop(uv_handle_t* h) { + if (!(h->flags & UV__ACTIVE)) return; + if (!(h->flags & UV__REF)) return; + uv__active_handle_rm(h); + h->flags &= ~UV__ACTIVE; +} +#define uv__handle_stop(h) uv__handle_stop((uv_handle_t*)(h)) + +UNUSED static void uv__handle_ref(uv_handle_t* h) { + if (h->flags & UV__REF) return; + if (h->flags & UV__ACTIVE) uv__active_handle_add(h); + h->flags |= UV__REF; +} +#define uv__handle_ref(h) uv__handle_ref((uv_handle_t*)(h)) + +UNUSED static void uv__handle_unref(uv_handle_t* h) { + if (!(h->flags & UV__REF)) return; + if (h->flags & UV__ACTIVE) uv__active_handle_rm(h); + h->flags &= ~UV__REF; +} +#define uv__handle_unref(h) uv__handle_unref((uv_handle_t*)(h)) #endif /* UV_COMMON_H_ */ |