Groonga 3.0.9 Source Code Document
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ngx_event_posted.h
Go to the documentation of this file.
1 
2 /*
3  * Copyright (C) Igor Sysoev
4  * Copyright (C) Nginx, Inc.
5  */
6 
7 
8 #ifndef _NGX_EVENT_POSTED_H_INCLUDED_
9 #define _NGX_EVENT_POSTED_H_INCLUDED_
10 
11 
12 #include <ngx_config.h>
13 #include <ngx_core.h>
14 #include <ngx_event.h>
15 
16 
17 #if (NGX_THREADS)
18 extern ngx_mutex_t *ngx_posted_events_mutex;
19 #endif
20 
21 
22 #define ngx_locked_post_event(ev, queue) \
23  \
24  if (ev->prev == NULL) { \
25  ev->next = (ngx_event_t *) *queue; \
26  ev->prev = (ngx_event_t **) queue; \
27  *queue = ev; \
28  \
29  if (ev->next) { \
30  ev->next->prev = &ev->next; \
31  } \
32  \
33  ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, "post event %p", ev); \
34  \
35  } else { \
36  ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, \
37  "update posted event %p", ev); \
38  }
39 
40 
41 #define ngx_post_event(ev, queue) \
42  \
43  ngx_mutex_lock(ngx_posted_events_mutex); \
44  ngx_locked_post_event(ev, queue); \
45  ngx_mutex_unlock(ngx_posted_events_mutex);
46 
47 
48 #define ngx_delete_posted_event(ev) \
49  \
50  *(ev->prev) = ev->next; \
51  \
52  if (ev->next) { \
53  ev->next->prev = ev->prev; \
54  } \
55  \
56  ev->prev = NULL; \
57  ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, \
58  "delete posted event %p", ev);
59 
60 
61 
65 
66 #if (NGX_THREADS)
67 ngx_int_t ngx_event_thread_process_posted(ngx_cycle_t *cycle);
68 #endif
69 
70 
73 
74 
75 #endif /* _NGX_EVENT_POSTED_H_INCLUDED_ */