Mercurial > hg > nginx
comparison src/event/ngx_event_timer.c @ 5896:3efdd7788bb0
Events: introduced cancelable timers.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Wed, 13 Aug 2014 22:45:04 +0400 |
parents | 0f53e5fb7205 |
children | 3069dd358ba2 |
comparison
equal
deleted
inserted
replaced
5895:0f53e5fb7205 | 5896:3efdd7788bb0 |
---|---|
92 ev->timedout = 1; | 92 ev->timedout = 1; |
93 | 93 |
94 ev->handler(ev); | 94 ev->handler(ev); |
95 } | 95 } |
96 } | 96 } |
97 | |
98 | |
99 void | |
100 ngx_event_cancel_timers(void) | |
101 { | |
102 ngx_event_t *ev; | |
103 ngx_rbtree_node_t *node, *root, *sentinel; | |
104 | |
105 sentinel = ngx_event_timer_rbtree.sentinel; | |
106 | |
107 for ( ;; ) { | |
108 root = ngx_event_timer_rbtree.root; | |
109 | |
110 if (root == sentinel) { | |
111 return; | |
112 } | |
113 | |
114 node = ngx_rbtree_min(root, sentinel); | |
115 | |
116 ev = (ngx_event_t *) ((char *) node - offsetof(ngx_event_t, timer)); | |
117 | |
118 if (!ev->cancelable) { | |
119 return; | |
120 } | |
121 | |
122 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, | |
123 "event timer cancel: %d: %M", | |
124 ngx_event_ident(ev->data), ev->timer.key); | |
125 | |
126 ngx_rbtree_delete(&ngx_event_timer_rbtree, &ev->timer); | |
127 | |
128 #if (NGX_DEBUG) | |
129 ev->timer.left = NULL; | |
130 ev->timer.right = NULL; | |
131 ev->timer.parent = NULL; | |
132 #endif | |
133 | |
134 ev->timer_set = 0; | |
135 | |
136 ev->handler(ev); | |
137 } | |
138 } |