Mercurial > hg > nginx-quic
comparison src/event/ngx_event_timer.h @ 557:ecd9c160f25b release-0.3.0
nginx-0.3.0-RELEASE import
*) Change: the 10-days live time limit of worker process was
eliminated. The limit was introduced because of millisecond timers
overflow.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 07 Oct 2005 13:30:52 +0000 |
parents | d4ea69372b94 |
children | c1f965ef9718 |
comparison
equal
deleted
inserted
replaced
556:21a706ff4e1f | 557:ecd9c160f25b |
---|---|
14 | 14 |
15 | 15 |
16 #define NGX_TIMER_INFINITE (ngx_msec_t) -1 | 16 #define NGX_TIMER_INFINITE (ngx_msec_t) -1 |
17 #define NGX_TIMER_ERROR (ngx_msec_t) -2 | 17 #define NGX_TIMER_ERROR (ngx_msec_t) -2 |
18 | 18 |
19 | |
20 /* | |
21 * the 32-bit timer key value resolution | |
22 * | |
23 * 1 msec - 24 days | |
24 * 10 msec - 8 months | |
25 * 50 msec - 3 years 5 months | |
26 * 100 msec - 6 years 10 months | |
27 */ | |
28 | |
29 #define NGX_TIMER_RESOLUTION 1 | |
30 | |
31 #define NGX_TIMER_LAZY_DELAY 300 | 19 #define NGX_TIMER_LAZY_DELAY 300 |
32 | 20 |
33 | 21 |
34 ngx_int_t ngx_event_timer_init(ngx_log_t *log); | 22 ngx_int_t ngx_event_timer_init(ngx_log_t *log); |
35 ngx_msec_t ngx_event_find_timer(void); | 23 ngx_msec_t ngx_event_find_timer(void); |
36 void ngx_event_expire_timers(ngx_msec_t timer); | 24 void ngx_event_expire_timers(void); |
37 | 25 |
38 | 26 |
39 #if (NGX_THREADS) | 27 #if (NGX_THREADS) |
40 extern ngx_mutex_t *ngx_event_timer_mutex; | 28 extern ngx_mutex_t *ngx_event_timer_mutex; |
41 #endif | 29 #endif |
47 | 35 |
48 static ngx_inline void | 36 static ngx_inline void |
49 ngx_event_del_timer(ngx_event_t *ev) | 37 ngx_event_del_timer(ngx_event_t *ev) |
50 { | 38 { |
51 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, | 39 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, |
52 "event timer del: %d: %d", | 40 "event timer del: %d: %M", |
53 ngx_event_ident(ev->data), ev->rbtree_key); | 41 ngx_event_ident(ev->data), ev->rbtree_key); |
54 | 42 |
55 if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) { | 43 if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) { |
56 return; | 44 return; |
57 } | 45 } |
73 | 61 |
74 | 62 |
75 static ngx_inline void | 63 static ngx_inline void |
76 ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer) | 64 ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer) |
77 { | 65 { |
78 ngx_int_t key; | 66 ngx_rbtree_key_t key; |
67 ngx_rbtree_key_int_t diff; | |
79 | 68 |
80 key = (ngx_int_t) | 69 key = ngx_current_time + timer; |
81 (ngx_elapsed_msec / NGX_TIMER_RESOLUTION * NGX_TIMER_RESOLUTION | |
82 + timer) / NGX_TIMER_RESOLUTION; | |
83 #if 0 | |
84 (ngx_elapsed_msec + timer) / NGX_TIMER_RESOLUTION; | |
85 #endif | |
86 | 70 |
87 if (ev->timer_set) { | 71 if (ev->timer_set) { |
88 | 72 |
89 /* | 73 /* |
90 * Use the previous timer value if a difference between them is less | 74 * Use the previous timer value if a difference between them is less |
91 * then NGX_TIMER_LAZY_DELAY milliseconds. It allows to minimize | 75 * then NGX_TIMER_LAZY_DELAY milliseconds. It allows to minimize |
92 * the rbtree operations for the fast connections. | 76 * the rbtree operations for the fast connections. |
93 */ | 77 */ |
94 | 78 |
95 if (abs(key - ev->rbtree_key) | 79 diff = (ngx_rbtree_key_int_t) (key - ev->rbtree_key); |
96 < NGX_TIMER_LAZY_DELAY / NGX_TIMER_RESOLUTION) | 80 |
97 { | 81 if (ngx_abs(diff) < NGX_TIMER_LAZY_DELAY) { |
98 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0, | 82 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0, |
99 "event timer: %d, old: %i, new: %i", | 83 "event timer: %d, old: %M, new: %M", |
100 ngx_event_ident(ev->data), ev->rbtree_key, key); | 84 ngx_event_ident(ev->data), ev->rbtree_key, key); |
101 return; | 85 return; |
102 } | 86 } |
103 | 87 |
104 ngx_del_timer(ev); | 88 ngx_del_timer(ev); |
105 } | 89 } |
106 | 90 |
107 ev->rbtree_key = key; | 91 ev->rbtree_key = key; |
108 | 92 |
109 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, | 93 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0, |
110 "event timer add: %d: %i", | 94 "event timer add: %d: %M:%M", |
111 ngx_event_ident(ev->data), ev->rbtree_key); | 95 ngx_event_ident(ev->data), timer, ev->rbtree_key); |
112 | 96 |
113 if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) { | 97 if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) { |
114 return; | 98 return; |
115 } | 99 } |
116 | 100 |