Mercurial > hg > nginx
comparison src/event/ngx_event_timer.c @ 375:744ccb59062d
nginx-0.0.7-2004-07-02-19:54:34 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 02 Jul 2004 15:54:34 +0000 |
parents | 213f17e9f776 |
children | 73688d5d7fc3 |
comparison
equal
deleted
inserted
replaced
374:213f17e9f776 | 375:744ccb59062d |
---|---|
86 { | 86 { |
87 ev = (ngx_event_t *) | 87 ev = (ngx_event_t *) |
88 ((char *) node - offsetof(ngx_event_t, rbtree_key)); | 88 ((char *) node - offsetof(ngx_event_t, rbtree_key)); |
89 | 89 |
90 #if (NGX_THREADS) | 90 #if (NGX_THREADS) |
91 if (ngx_trylock(ev->lock) == 0) { | 91 |
92 if (ngx_threaded && ngx_trylock(ev->lock) == 0) { | |
93 | |
94 /* | |
95 * We can not change the timer of the event that is been | |
96 * handling by another thread. And we can not easy walk | |
97 * the rbtree to find a next expired timer so we exit the loop. | |
98 * However it should be rare case when the event that is | |
99 * been handling has expired timer. | |
100 */ | |
101 | |
92 break; | 102 break; |
93 } | 103 } |
94 #endif | 104 #endif |
95 | 105 |
96 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, | 106 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, |
109 ev->rbtree_parent = NULL; | 119 ev->rbtree_parent = NULL; |
110 #endif | 120 #endif |
111 | 121 |
112 ev->timer_set = 0; | 122 ev->timer_set = 0; |
113 | 123 |
124 #if (NGX_THREADS) | |
114 if (ngx_threaded) { | 125 if (ngx_threaded) { |
115 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { | 126 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { |
116 return; | 127 return; |
117 } | 128 } |
118 | 129 |
119 ev->posted_timedout = 1; | 130 ev->posted_timedout = 1; |
131 ev->returned_instance = ev->instance; | |
120 ngx_post_event(ev); | 132 ngx_post_event(ev); |
121 | 133 |
122 ngx_mutex_unlock(ngx_posted_events_mutex); | 134 ngx_mutex_unlock(ngx_posted_events_mutex); |
135 | |
136 ngx_unlock(ev->lock); | |
137 | |
123 continue; | 138 continue; |
124 } | 139 } |
140 #endif | |
125 | 141 |
126 ev->timedout = 1; | 142 ev->timedout = 1; |
127 | 143 |
128 ev->event_handler(ev); | 144 ev->event_handler(ev); |
129 | 145 |