diff options
author | Igor Sysoev <igor@sysoev.ru> | 2004-07-02 19:54:34 +0400 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2004-07-02 19:54:34 +0400 |
commit | 98c1cf18c1a4ffb14ded78e93359f87ee7bdeed4 (patch) | |
tree | 1e2b79792bce785142da3a73a3d68fde1154b542 /src/event/ngx_event_timer.c | |
parent | 46cd7c2a9bc740a2d3de03410dd84412b9d85856 (diff) |
nginx-0.0.7-2004-07-02-19:54:34 import
Diffstat (limited to 'src/event/ngx_event_timer.c')
-rw-r--r-- | src/event/ngx_event_timer.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c index c10e23069..0b3822009 100644 --- a/src/event/ngx_event_timer.c +++ b/src/event/ngx_event_timer.c @@ -88,7 +88,17 @@ void ngx_event_expire_timers(ngx_msec_t timer) ((char *) node - offsetof(ngx_event_t, rbtree_key)); #if (NGX_THREADS) - if (ngx_trylock(ev->lock) == 0) { + + if (ngx_threaded && ngx_trylock(ev->lock) == 0) { + + /* + * We can not change the timer of the event that is been + * handling by another thread. And we can not easy walk + * the rbtree to find a next expired timer so we exit the loop. + * However it should be rare case when the event that is + * been handling has expired timer. + */ + break; } #endif @@ -111,17 +121,23 @@ void ngx_event_expire_timers(ngx_msec_t timer) ev->timer_set = 0; +#if (NGX_THREADS) if (ngx_threaded) { if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { return; } ev->posted_timedout = 1; + ev->returned_instance = ev->instance; ngx_post_event(ev); ngx_mutex_unlock(ngx_posted_events_mutex); + + ngx_unlock(ev->lock); + continue; } +#endif ev->timedout = 1; |