Mercurial > hg > nginx-vendor-0-6
comparison src/event/ngx_event_timer.c @ 106:45f7329b4bd0 NGINX_0_3_0
nginx 0.3.0
*) Change: the 10-days live time limit of worker process was
eliminated. The limit was introduced because of millisecond timers
overflow.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Fri, 07 Oct 2005 00:00:00 +0400 |
parents | 991c6e4c7654 |
children | cf3d6edb3ad6 |
comparison
equal
deleted
inserted
replaced
105:531d62c2a28d | 106:45f7329b4bd0 |
---|---|
58 node = ngx_rbtree_min((ngx_rbtree_t *) ngx_event_timer_rbtree, | 58 node = ngx_rbtree_min((ngx_rbtree_t *) ngx_event_timer_rbtree, |
59 &ngx_event_timer_sentinel); | 59 &ngx_event_timer_sentinel); |
60 | 60 |
61 ngx_mutex_unlock(ngx_event_timer_mutex); | 61 ngx_mutex_unlock(ngx_event_timer_mutex); |
62 | 62 |
63 timer = (ngx_msec_t) | 63 timer = (ngx_msec_t) node->key - ngx_current_time; |
64 (node->key * NGX_TIMER_RESOLUTION - | |
65 ngx_elapsed_msec / NGX_TIMER_RESOLUTION * NGX_TIMER_RESOLUTION); | |
66 #if 0 | |
67 (node->key * NGX_TIMER_RESOLUTION - ngx_elapsed_msec); | |
68 #endif | |
69 | 64 |
70 return timer > 0 ? timer : 0 ; | 65 return timer > 0 ? timer : 0 ; |
71 } | 66 } |
72 | 67 |
73 | 68 |
74 void | 69 void |
75 ngx_event_expire_timers(ngx_msec_t timer) | 70 ngx_event_expire_timers(void) |
76 { | 71 { |
77 ngx_event_t *ev; | 72 ngx_event_t *ev; |
78 ngx_rbtree_t *node; | 73 ngx_rbtree_t *node; |
79 | |
80 if (timer < 0) { | |
81 /* avoid the endless loop if the time goes backward for some reason */ | |
82 timer = 0; | |
83 } | |
84 | 74 |
85 for ( ;; ) { | 75 for ( ;; ) { |
86 | 76 |
87 if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) { | 77 if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) { |
88 return; | 78 return; |
93 } | 83 } |
94 | 84 |
95 node = ngx_rbtree_min((ngx_rbtree_t *) ngx_event_timer_rbtree, | 85 node = ngx_rbtree_min((ngx_rbtree_t *) ngx_event_timer_rbtree, |
96 &ngx_event_timer_sentinel); | 86 &ngx_event_timer_sentinel); |
97 | 87 |
98 if (node->key <= (ngx_msec_t) | 88 /* node->key <= ngx_current_time */ |
99 (ngx_old_elapsed_msec + timer) / NGX_TIMER_RESOLUTION) | 89 |
90 if ((ngx_rbtree_key_int_t) node->key | |
91 - (ngx_rbtree_key_int_t) ngx_current_time | |
92 <= 0) | |
100 { | 93 { |
101 ev = (ngx_event_t *) | 94 ev = (ngx_event_t *) |
102 ((char *) node - offsetof(ngx_event_t, rbtree_key)); | 95 ((char *) node - offsetof(ngx_event_t, rbtree_key)); |
103 | 96 |
104 #if (NGX_THREADS) | 97 #if (NGX_THREADS) |
118 break; | 111 break; |
119 } | 112 } |
120 #endif | 113 #endif |
121 | 114 |
122 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, | 115 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, |
123 "event timer del: %d: %i", | 116 "event timer del: %d: %M", |
124 ngx_event_ident(ev->data), ev->rbtree_key); | 117 ngx_event_ident(ev->data), ev->rbtree_key); |
125 | 118 |
126 ngx_rbtree_delete((ngx_rbtree_t **) &ngx_event_timer_rbtree, | 119 ngx_rbtree_delete((ngx_rbtree_t **) &ngx_event_timer_rbtree, |
127 &ngx_event_timer_sentinel, | 120 &ngx_event_timer_sentinel, |
128 (ngx_rbtree_t *) &ev->rbtree_key); | 121 (ngx_rbtree_t *) &ev->rbtree_key); |