comparison src/event/ngx_event_posted.h @ 5821:3f5f0ab59b35

Events: processing of posted events changed from LIFO to FIFO. In theory, this can provide a bit better distribution of latencies. Also it simplifies the code, since ngx_queue_t is now used instead of custom implementation.
author Valentin Bartenev <vbart@nginx.com>
date Mon, 01 Sep 2014 18:20:18 +0400
parents 3377f9459e99
children 3d4730eada9c
comparison
equal deleted inserted replaced
5820:3377f9459e99 5821:3f5f0ab59b35
12 #include <ngx_config.h> 12 #include <ngx_config.h>
13 #include <ngx_core.h> 13 #include <ngx_core.h>
14 #include <ngx_event.h> 14 #include <ngx_event.h>
15 15
16 16
17 #define ngx_post_event(ev, queue) \ 17 #define ngx_post_event(ev, q) \
18 \ 18 \
19 if (ev->prev == NULL) { \ 19 if (!ev->posted) { \
20 ev->next = *queue; \ 20 ev->posted = 1; \
21 ev->prev = queue; \ 21 ngx_queue_insert_tail(q, &ev->queue); \
22 *queue = ev; \
23 \
24 if (ev->next) { \
25 ev->next->prev = &ev->next; \
26 } \
27 \ 22 \
28 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, "post event %p", ev); \ 23 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, "post event %p", ev); \
29 \ 24 \
30 } else { \ 25 } else { \
31 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, \ 26 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, \
33 } 28 }
34 29
35 30
36 #define ngx_delete_posted_event(ev) \ 31 #define ngx_delete_posted_event(ev) \
37 \ 32 \
38 *(ev->prev) = ev->next; \ 33 ev->posted = 0; \
34 ngx_queue_remove(&ev->queue); \
39 \ 35 \
40 if (ev->next) { \
41 ev->next->prev = ev->prev; \
42 } \
43 \
44 ev->prev = NULL; \
45 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, \ 36 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, \
46 "delete posted event %p", ev); 37 "delete posted event %p", ev);
47 38
48 39
49 40
50 void ngx_event_process_posted(ngx_cycle_t *cycle, ngx_event_t **posted); 41 void ngx_event_process_posted(ngx_cycle_t *cycle, ngx_queue_t *posted);
51 42
52 43
53 extern ngx_event_t *ngx_posted_accept_events; 44 extern ngx_queue_t ngx_posted_accept_events;
54 extern ngx_event_t *ngx_posted_events; 45 extern ngx_queue_t ngx_posted_events;
55 46
56 47
57 #endif /* _NGX_EVENT_POSTED_H_INCLUDED_ */ 48 #endif /* _NGX_EVENT_POSTED_H_INCLUDED_ */