Mercurial > hg > nginx-quic
comparison src/event/ngx_event_timer.c @ 371:780e93985b93
nginx-0.0.7-2004-06-28-20:05:02 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 28 Jun 2004 16:05:02 +0000 |
parents | 446782c909b3 |
children | c9fdfccebc49 |
comparison
equal
deleted
inserted
replaced
370:54f76b0b8dca | 371:780e93985b93 |
---|---|
69 ngx_rbtree_t *node; | 69 ngx_rbtree_t *node; |
70 | 70 |
71 for ( ;; ) { | 71 for ( ;; ) { |
72 | 72 |
73 if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) { | 73 if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) { |
74 break; | 74 return; |
75 } | 75 } |
76 | 76 |
77 if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) { | 77 if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) { |
78 return; | 78 return; |
79 } | 79 } |
80 | 80 |
81 node = ngx_rbtree_min((ngx_rbtree_t *) ngx_event_timer_rbtree, | 81 node = ngx_rbtree_min((ngx_rbtree_t *) ngx_event_timer_rbtree, |
82 &ngx_event_timer_sentinel); | 82 &ngx_event_timer_sentinel); |
83 | 83 |
84 ngx_mutex_unlock(ngx_event_timer_mutex); | |
85 | |
86 if (node->key <= (ngx_msec_t) | 84 if (node->key <= (ngx_msec_t) |
87 (ngx_old_elapsed_msec + timer) / NGX_TIMER_RESOLUTION) | 85 (ngx_old_elapsed_msec + timer) / NGX_TIMER_RESOLUTION) |
88 { | 86 { |
89 ev = (ngx_event_t *) | 87 ev = (ngx_event_t *) |
90 ((char *) node - offsetof(ngx_event_t, rbtree_key)); | 88 ((char *) node - offsetof(ngx_event_t, rbtree_key)); |
91 | 89 |
92 ngx_del_timer(ev); | 90 if (ngx_trylock(ev->lock) == 0) { |
91 break; | |
92 } | |
93 | 93 |
94 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, | |
95 "event timer del: %d: %d", | |
96 ngx_event_ident(ev->data), ev->rbtree_key); | |
97 | |
98 ngx_rbtree_delete((ngx_rbtree_t **) &ngx_event_timer_rbtree, | |
99 &ngx_event_timer_sentinel, | |
100 (ngx_rbtree_t *) &ev->rbtree_key); | |
101 | |
102 ngx_mutex_unlock(ngx_event_timer_mutex); | |
103 | |
104 #if (NGX_DEBUG) | |
105 ev->rbtree_left = NULL; | |
106 ev->rbtree_right = NULL; | |
107 ev->rbtree_parent = NULL; | |
108 #endif | |
109 | |
110 ev->timer_set = 0; | |
94 ev->timedout = 1; | 111 ev->timedout = 1; |
112 ngx_unlock(ev->lock); | |
95 | 113 |
96 if (ngx_threaded) { | 114 if (ngx_threaded) { |
97 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { | 115 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { |
98 return; | 116 return; |
99 } | 117 } |
105 } | 123 } |
106 | 124 |
107 ev->event_handler(ev); | 125 ev->event_handler(ev); |
108 continue; | 126 continue; |
109 } | 127 } |
110 | |
111 break; | 128 break; |
112 } | 129 } |
130 | |
131 ngx_mutex_unlock(ngx_event_timer_mutex); | |
113 } | 132 } |