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);