Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2004-07-02 19:54:34 +0400
committerIgor Sysoev <igor@sysoev.ru>2004-07-02 19:54:34 +0400
commit98c1cf18c1a4ffb14ded78e93359f87ee7bdeed4 (patch)
tree1e2b79792bce785142da3a73a3d68fde1154b542 /src/event/ngx_event_timer.c
parent46cd7c2a9bc740a2d3de03410dd84412b9d85856 (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.c18
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;