comparison src/event/ngx_event_timer.h @ 108:cf3d6edb3ad6 NGINX_0_3_1

nginx 0.3.1 *) Bugfix: the segmentation fault occurred when the signal queue overflowed if the "rtsig" method was used; bug appeared in 0.2.0. *) Change: correct handling of the "\\", "\"", "\'", and "\$" pairs in SSI.
author Igor Sysoev <http://sysoev.ru>
date Mon, 10 Oct 2005 00:00:00 +0400
parents 45f7329b4bd0
children dad2fe8ecf08
comparison
equal deleted inserted replaced
107:495d867e35e8 108:cf3d6edb3ad6
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 }