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 }