Mercurial > hg > nginx
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) |