3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Nginx, Inc.
8 #ifndef _NGX_EVENT_POSTED_H_INCLUDED_
9 #define _NGX_EVENT_POSTED_H_INCLUDED_
12 #include <ngx_config.h>
14 #include <ngx_event.h>
18 extern ngx_mutex_t
*ngx_posted_events_mutex
;
22 #define ngx_locked_post_event(ev, queue) \
24 if (ev->prev == NULL) { \
25 ev->next = (ngx_event_t *) *queue; \
26 ev->prev = (ngx_event_t **) queue; \
30 ev->next->prev = &ev->next; \
33 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, "post event %p", ev); \
36 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, \
37 "update posted event %p", ev); \
41 #define ngx_post_event(ev, queue) \
43 ngx_mutex_lock(ngx_posted_events_mutex); \
44 ngx_locked_post_event(ev, queue); \
45 ngx_mutex_unlock(ngx_posted_events_mutex);
48 #define ngx_delete_posted_event(ev) \
50 *(ev->prev) = ev->next; \
53 ev->next->prev = ev->prev; \
57 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, \
58 "delete posted event %p", ev);
62 void ngx_event_process_posted(ngx_cycle_t
*cycle
,
63 ngx_thread_volatile ngx_event_t
**posted
);
64 void ngx_wakeup_worker_thread(ngx_cycle_t
*cycle
);
67 ngx_int_t
ngx_event_thread_process_posted(ngx_cycle_t
*cycle
);
71 extern ngx_thread_volatile ngx_event_t
*ngx_posted_accept_events
;
72 extern ngx_thread_volatile ngx_event_t
*ngx_posted_events
;
75 #endif /* _NGX_EVENT_POSTED_H_INCLUDED_ */