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 }