Mercurial > hg > nginx
comparison src/event/ngx_event_timer.h @ 559:c1f965ef9718 release-0.3.1
nginx-0.3.1-RELEASE import
*) Bugfix: the segmentation fault occurred when the signal queue
overflowed if the "rtsig" method was used; the bug had appeared in
0.2.0.
*) Change: correct handling of the "\\", "\"", "\'", and "\$" pairs in
SSI.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 10 Oct 2005 12:59:41 +0000 |
parents | ecd9c160f25b |
children | e48ebafc6939 |
comparison
equal
deleted
inserted
replaced
558:96a964d17328 | 559:c1f965ef9718 |
---|---|
27 #if (NGX_THREADS) | 27 #if (NGX_THREADS) |
28 extern ngx_mutex_t *ngx_event_timer_mutex; | 28 extern ngx_mutex_t *ngx_event_timer_mutex; |
29 #endif | 29 #endif |
30 | 30 |
31 | 31 |
32 extern ngx_thread_volatile ngx_rbtree_t *ngx_event_timer_rbtree; | 32 extern ngx_thread_volatile ngx_rbtree_t ngx_event_timer_rbtree; |
33 extern ngx_rbtree_t ngx_event_timer_sentinel; | |
34 | 33 |
35 | 34 |
36 static ngx_inline void | 35 static ngx_inline void |
37 ngx_event_del_timer(ngx_event_t *ev) | 36 ngx_event_del_timer(ngx_event_t *ev) |
38 { | 37 { |
39 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, | 38 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, |
40 "event timer del: %d: %M", | 39 "event timer del: %d: %M", |
41 ngx_event_ident(ev->data), ev->rbtree_key); | 40 ngx_event_ident(ev->data), ev->timer.key); |
42 | 41 |
43 if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) { | 42 if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) { |
44 return; | 43 return; |
45 } | 44 } |
46 | 45 |
47 ngx_rbtree_delete((ngx_rbtree_t **) &ngx_event_timer_rbtree, | 46 ngx_rbtree_delete(&ngx_event_timer_rbtree, &ev->timer); |
48 &ngx_event_timer_sentinel, | |
49 (ngx_rbtree_t *) &ev->rbtree_key); | |
50 | 47 |
51 ngx_mutex_unlock(ngx_event_timer_mutex); | 48 ngx_mutex_unlock(ngx_event_timer_mutex); |
52 | 49 |
53 #if (NGX_DEBUG) | 50 #if (NGX_DEBUG) |
54 ev->rbtree_left = NULL; | 51 ev->timer.left = NULL; |
55 ev->rbtree_right = NULL; | 52 ev->timer.right = NULL; |
56 ev->rbtree_parent = NULL; | 53 ev->timer.parent = NULL; |
57 #endif | 54 #endif |
58 | 55 |
59 ev->timer_set = 0; | 56 ev->timer_set = 0; |
60 } | 57 } |
61 | 58 |
74 * Use the previous timer value if a difference between them is less | 71 * Use the previous timer value if a difference between them is less |
75 * then NGX_TIMER_LAZY_DELAY milliseconds. It allows to minimize | 72 * then NGX_TIMER_LAZY_DELAY milliseconds. It allows to minimize |
76 * the rbtree operations for the fast connections. | 73 * the rbtree operations for the fast connections. |
77 */ | 74 */ |
78 | 75 |
79 diff = (ngx_rbtree_key_int_t) (key - ev->rbtree_key); | 76 diff = (ngx_rbtree_key_int_t) (key - ev->timer.key); |
80 | 77 |
81 if (ngx_abs(diff) < NGX_TIMER_LAZY_DELAY) { | 78 if (ngx_abs(diff) < NGX_TIMER_LAZY_DELAY) { |
82 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0, | 79 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0, |
83 "event timer: %d, old: %M, new: %M", | 80 "event timer: %d, old: %M, new: %M", |
84 ngx_event_ident(ev->data), ev->rbtree_key, key); | 81 ngx_event_ident(ev->data), ev->timer.key, key); |
85 return; | 82 return; |
86 } | 83 } |
87 | 84 |
88 ngx_del_timer(ev); | 85 ngx_del_timer(ev); |
89 } | 86 } |
90 | 87 |
91 ev->rbtree_key = key; | 88 ev->timer.key = key; |
92 | 89 |
93 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0, | 90 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0, |
94 "event timer add: %d: %M:%M", | 91 "event timer add: %d: %M:%M", |
95 ngx_event_ident(ev->data), timer, ev->rbtree_key); | 92 ngx_event_ident(ev->data), timer, ev->timer.key); |
96 | 93 |
97 if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) { | 94 if (ngx_mutex_lock(ngx_event_timer_mutex) == NGX_ERROR) { |
98 return; | 95 return; |
99 } | 96 } |
100 | 97 |
101 ngx_rbtree_insert((ngx_rbtree_t **) &ngx_event_timer_rbtree, | 98 ngx_rbtree_insert(&ngx_event_timer_rbtree, &ev->timer); |
102 &ngx_event_timer_sentinel, | |
103 (ngx_rbtree_t *) &ev->rbtree_key); | |
104 | 99 |
105 ngx_mutex_unlock(ngx_event_timer_mutex); | 100 ngx_mutex_unlock(ngx_event_timer_mutex); |
106 | 101 |
107 ev->timer_set = 1; | 102 ev->timer_set = 1; |
108 } | 103 } |