diff src/event/ngx_event.c @ 7617:f1720934c45b

SSL: reworked posted next events again. Previous change 1ce3f01a4355 incorrectly introduced processing of the ngx_posted_next_events queue at the end of operation, effectively making posted next events a nop, since at the end of an event loop iteration the queue is always empty. Correct approach is to move events to the ngx_posted_events queue at an iteration start, as it was done previously. Further, in some cases the c->read event might be already in the ngx_posted_events queue, and calling ngx_post_event() with the ngx_posted_next_events queue won't do anything. To make sure the event will be correctly placed into the ngx_posted_next_events queue we now check if it is already posted.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 27 Dec 2019 19:43:01 +0300
parents 1ce3f01a4355
children 9ca8fb98ef1c 38c0898b6df7
line wrap: on
line diff
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -238,6 +238,7 @@ ngx_process_events_and_timers(ngx_cycle_
     }
 
     if (!ngx_queue_empty(&ngx_posted_next_events)) {
+        ngx_event_move_posted_next(cycle);
         timer = 0;
     }
 
@@ -261,7 +262,6 @@ ngx_process_events_and_timers(ngx_cycle_
     }
 
     ngx_event_process_posted(cycle, &ngx_posted_events);
-    ngx_event_process_posted_next(cycle, &ngx_posted_next_events);
 }