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