comparison 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
comparison
equal deleted inserted replaced
7616:fd4d2155d3e6 7617:f1720934c45b
236 } 236 }
237 } 237 }
238 } 238 }
239 239
240 if (!ngx_queue_empty(&ngx_posted_next_events)) { 240 if (!ngx_queue_empty(&ngx_posted_next_events)) {
241 ngx_event_move_posted_next(cycle);
241 timer = 0; 242 timer = 0;
242 } 243 }
243 244
244 delta = ngx_current_msec; 245 delta = ngx_current_msec;
245 246
259 if (delta) { 260 if (delta) {
260 ngx_event_expire_timers(); 261 ngx_event_expire_timers();
261 } 262 }
262 263
263 ngx_event_process_posted(cycle, &ngx_posted_events); 264 ngx_event_process_posted(cycle, &ngx_posted_events);
264 ngx_event_process_posted_next(cycle, &ngx_posted_next_events);
265 } 265 }
266 266
267 267
268 ngx_int_t 268 ngx_int_t
269 ngx_handle_read_event(ngx_event_t *rev, ngx_uint_t flags) 269 ngx_handle_read_event(ngx_event_t *rev, ngx_uint_t flags)