diff 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
line wrap: on
line diff
--- a/src/event/ngx_event_posted.h
+++ b/src/event/ngx_event_posted.h
@@ -14,16 +14,11 @@
 #include <ngx_event.h>
 
 
-#define ngx_post_event(ev, queue)                                             \
+#define ngx_post_event(ev, q)                                                 \
                                                                               \
-    if (ev->prev == NULL) {                                                   \
-        ev->next = *queue;                                                    \
-        ev->prev = queue;                                                     \
-        *queue = ev;                                                          \
-                                                                              \
-        if (ev->next) {                                                       \
-            ev->next->prev = &ev->next;                                       \
-        }                                                                     \
+    if (!ev->posted) {                                                        \
+        ev->posted = 1;                                                       \
+        ngx_queue_insert_tail(q, &ev->queue);                                 \
                                                                               \
         ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, "post event %p", ev);  \
                                                                               \
@@ -35,23 +30,19 @@
 
 #define ngx_delete_posted_event(ev)                                           \
                                                                               \
-    *(ev->prev) = ev->next;                                                   \
+    ev->posted = 0;                                                           \
+    ngx_queue_remove(&ev->queue);                                             \
                                                                               \
-    if (ev->next) {                                                           \
-        ev->next->prev = ev->prev;                                            \
-    }                                                                         \
-                                                                              \
-    ev->prev = NULL;                                                          \
     ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0,                            \
                    "delete posted event %p", ev);
 
 
 
-void ngx_event_process_posted(ngx_cycle_t *cycle, ngx_event_t **posted);
+void ngx_event_process_posted(ngx_cycle_t *cycle, ngx_queue_t *posted);
 
 
-extern ngx_event_t  *ngx_posted_accept_events;
-extern ngx_event_t  *ngx_posted_events;
+extern ngx_queue_t  ngx_posted_accept_events;
+extern ngx_queue_t  ngx_posted_events;
 
 
 #endif /* _NGX_EVENT_POSTED_H_INCLUDED_ */