Mercurial > hg > nginx
comparison src/event/modules/ngx_kqueue_module.c @ 11:f323b4f74e4a
nginx-0.0.1-2002-09-12-18:42:29 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 12 Sep 2002 14:42:29 +0000 |
parents | 708f8bb772ec |
children | 055ed05235ae |
comparison
equal
deleted
inserted
replaced
10:4f3879d9b6f6 | 11:f323b4f74e4a |
---|---|
55 | 55 |
56 } | 56 } |
57 | 57 |
58 int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) | 58 int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) |
59 { | 59 { |
60 ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1: 0; | |
61 | |
60 return ngx_kqueue_set_event(ev, event, EV_ADD | flags); | 62 return ngx_kqueue_set_event(ev, event, EV_ADD | flags); |
61 } | 63 } |
62 | 64 |
63 int ngx_kqueue_del_event(ngx_event_t *ev, int event) | 65 int ngx_kqueue_del_event(ngx_event_t *ev, int event) |
64 { | 66 { |
184 if (event_list[i].flags & EV_EOF) { | 186 if (event_list[i].flags & EV_EOF) { |
185 ev->eof = 1; | 187 ev->eof = 1; |
186 ev->error = event_list[i].fflags; | 188 ev->error = event_list[i].fflags; |
187 } | 189 } |
188 | 190 |
191 if (ev->oneshot) | |
192 ngx_del_timer(ev); | |
193 | |
189 if (ev->event_handler(ev) == NGX_ERROR) | 194 if (ev->event_handler(ev) == NGX_ERROR) |
190 ev->close_handler(ev); | 195 ev->close_handler(ev); |
191 | 196 |
192 break; | 197 break; |
193 | 198 |
205 { | 210 { |
206 ngx_event_t *e; | 211 ngx_event_t *e; |
207 | 212 |
208 ngx_log_debug(ev->log, "set timer: %d" _ timer); | 213 ngx_log_debug(ev->log, "set timer: %d" _ timer); |
209 | 214 |
215 ngx_assert((!ev->timer_next && !ev->timer_prev), return, ev->log, | |
216 "timer already set"); | |
217 | |
210 for (e = timer_queue.timer_next; | 218 for (e = timer_queue.timer_next; |
211 e != &timer_queue && timer > e->timer_delta; | 219 e != &timer_queue && timer > e->timer_delta; |
212 e = e->timer_next) | 220 e = e->timer_next) |
213 timer -= e->timer_delta; | 221 timer -= e->timer_delta; |
214 | 222 |