diff src/event/ngx_event_posted.c @ 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 9d2ad2fb4423
line wrap: on
line diff
--- a/src/event/ngx_event_posted.c
+++ b/src/event/ngx_event_posted.c
@@ -10,26 +10,24 @@
 #include <ngx_event.h>
 
 
-ngx_event_t  *ngx_posted_accept_events;
-ngx_event_t  *ngx_posted_events;
+ngx_queue_t  ngx_posted_accept_events;
+ngx_queue_t  ngx_posted_events;
 
 
 void
-ngx_event_process_posted(ngx_cycle_t *cycle, ngx_event_t **posted)
+ngx_event_process_posted(ngx_cycle_t *cycle, ngx_queue_t *posted)
 {
+    ngx_queue_t  *q;
     ngx_event_t  *ev;
 
-    for ( ;; ) {
+    while (!ngx_queue_empty(posted)) {
 
-        ev = *posted;
+        q = ngx_queue_head(posted);
+        ev = ngx_queue_data(q, ngx_event_t, queue);
 
         ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
                       "posted event %p", ev);
 
-        if (ev == NULL) {
-            return;
-        }
-
         ngx_delete_posted_event(ev);
 
         ev->handler(ev);