Mercurial > hg > nginx
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_ */ |