diff options
Diffstat (limited to 'src/event/ngx_event.h')
-rw-r--r-- | src/event/ngx_event.h | 109 |
1 files changed, 51 insertions, 58 deletions
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h index d3a96bd6e..15654379c 100644 --- a/src/event/ngx_event.h +++ b/src/event/ngx_event.h @@ -34,89 +34,57 @@ typedef struct { struct ngx_event_s { void *data; - /* TODO rename to handler */ - ngx_event_handler_pt event_handler; - - u_int index; - - /* the link of the posted queue or the event mutecies queues */ - ngx_event_t *next; + unsigned write:1; - ngx_log_t *log; + unsigned accept:1; - /* - * The inline of "ngx_rbtree_t rbtree;". - * - * It allows to pack the rbtree_color and the various event bit flags into - * the single "int". We also use "unsigned char" and then "unsigned short" - * because otherwise MSVC 6.0 uses an additional "int" for the bit flags. - * We use "char rbtree_color" instead of "unsigned int rbtree_color:1" - * because it preserves the bits order on the big endian platforms. - */ - - ngx_int_t rbtree_key; - void *rbtree_left; - void *rbtree_right; - void *rbtree_parent; - char rbtree_color; - - unsigned char oneshot:1; - - unsigned char write:1; + unsigned oneshot:1; /* used to detect the stale events in kqueue, rt signals and epoll */ - unsigned char use_instance:1; - unsigned char instance:1; - unsigned char returned_instance:1; + unsigned use_instance:1; + unsigned instance:1; + unsigned returned_instance:1; /* * the event was passed or would be passed to a kernel; * in aio mode - operation was posted. */ - unsigned char active:1; + unsigned active:1; - unsigned char disabled:1; - - unsigned char posted:1; + unsigned disabled:1; /* the ready event; in aio mode 0 means that no operation can be posted */ - unsigned short ready:1; + unsigned ready:1; /* aio operation is complete */ - unsigned short complete:1; - - unsigned short eof:1; - unsigned short error:1; - - unsigned short timedout:1; - unsigned short timer_set:1; + unsigned complete:1; - unsigned short delayed:1; + unsigned eof:1; + unsigned error:1; - unsigned short read_discarded:1; + unsigned timedout:1; + unsigned timer_set:1; - unsigned short unexpected_eof:1; + unsigned delayed:1; - unsigned short accept:1; + unsigned read_discarded:1; - unsigned short deferred_accept:1; + unsigned unexpected_eof:1; - unsigned short overflow:1; + unsigned deferred_accept:1; - /* TODO: aio_eof and kq_eof can be the single pending_eof */ - /* the pending eof in aio chain operation */ - unsigned short aio_eof:1; + unsigned overflow:1; - /* the pending eof reported by kqueue */ - unsigned short kq_eof:1; + /* the pending eof reported by kqueue or in aio chain operation */ + unsigned pending_eof:1; #if (WIN32) /* setsockopt(SO_UPDATE_ACCEPT_CONTEXT) was succesfull */ - unsigned short accept_context_updated:1; + unsigned accept_context_updated:1; #endif #if (HAVE_KQUEUE) - unsigned short kq_vnode:1; + unsigned kq_vnode:1; /* the pending errno reported by kqueue */ int kq_errno; @@ -139,9 +107,12 @@ struct ngx_event_s { #if (HAVE_KQUEUE) || (HAVE_IOCP) int available; #else - unsigned short available:1; + unsigned available:1; #endif + /* TODO rename to handler */ + ngx_event_handler_pt event_handler; + #if (HAVE_AIO) @@ -153,10 +124,26 @@ struct ngx_event_s { #endif + u_int index; -#if (NGX_THREADS) + ngx_log_t *log; - ngx_atomic_t *lock; + /* TODO: threads: padding to cache line */ + + /* + * STUB: The inline of "ngx_rbtree_t rbtree;" + */ + + ngx_int_t rbtree_key; + void *rbtree_left; + void *rbtree_right; + void *rbtree_parent; + char rbtree_color; + + + unsigned closed:1; + +#if (NGX_THREADS) unsigned locked:1; @@ -175,8 +162,14 @@ struct ngx_event_s { unsigned posted_available:1; #endif + ngx_atomic_t *lock; + #endif + /* the links of the posted queue */ + ngx_event_t *next; + ngx_event_t **prev; + #if 0 |