Mercurial > hg > nginx-quic
comparison src/event/modules/ngx_kqueue_module.c @ 26:53cb81681040
nginx-0.0.1-2002-12-15-09:25:09 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 15 Dec 2002 06:25:09 +0000 |
parents | 72ad26c77d2d |
children | d45effe5854c |
comparison
equal
deleted
inserted
replaced
25:a8b156554dfe | 26:53cb81681040 |
---|---|
14 #if (USE_KQUEUE) && !(HAVE_KQUEUE) | 14 #if (USE_KQUEUE) && !(HAVE_KQUEUE) |
15 #error "kqueue is not supported on this platform" | 15 #error "kqueue is not supported on this platform" |
16 #endif | 16 #endif |
17 | 17 |
18 | 18 |
19 | 19 /* should be per-thread */ |
20 static int kq; | 20 static int kq; |
21 static struct kevent *change_list, *event_list; | 21 static struct kevent *change_list, *event_list; |
22 static int nchanges, nevents; | 22 static int nchanges, nevents; |
23 | 23 |
24 static ngx_event_t timer_queue; | 24 static ngx_event_t timer_queue; |
25 /* */ | |
26 | |
25 | 27 |
26 int ngx_kqueue_init(int max_connections, ngx_log_t *log) | 28 int ngx_kqueue_init(int max_connections, ngx_log_t *log) |
27 { | 29 { |
28 int size = sizeof(struct kevent) * 512; | 30 int size = sizeof(struct kevent) * 512; |
29 | 31 |
51 #endif | 53 #endif |
52 | 54 |
53 return NGX_OK; | 55 return NGX_OK; |
54 } | 56 } |
55 | 57 |
58 | |
56 int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) | 59 int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) |
57 { | 60 { |
58 ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1: 0; | 61 ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1: 0; |
59 | 62 |
60 return ngx_kqueue_set_event(ev, event, EV_ADD | flags); | 63 return ngx_kqueue_set_event(ev, event, EV_ADD | flags); |
61 } | 64 } |
62 | 65 |
63 int ngx_kqueue_del_event(ngx_event_t *ev, int event) | 66 |
67 int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags) | |
64 { | 68 { |
65 ngx_event_t *e; | 69 ngx_event_t *e; |
66 | 70 |
67 if (ev->index <= nchanges && change_list[ev->index].udata == ev) { | 71 if (ev->index < nchanges && change_list[ev->index].udata == ev) { |
68 change_list[ev->index] = change_list[nchanges]; | 72 |
69 e = (ngx_event_t *) change_list[ev->index].udata; | 73 ngx_connection_t *cn = (ngx_connection_t *) ev->data; |
70 e->index = ev->index; | 74 ngx_log_debug(ev->log, "kqueue del event: %d: ft:%d" _ |
71 nchanges--; | 75 cn->fd _ event); |
76 | |
77 if (ev->index < --nchanges) { | |
78 e = (ngx_event_t *) change_list[nchanges].udata; | |
79 change_list[ev->index] = change_list[nchanges]; | |
80 e->index = ev->index; | |
81 } | |
72 | 82 |
73 return NGX_OK; | 83 return NGX_OK; |
74 } | 84 } |
75 | 85 |
86 if (flags & NGX_CLOSE_EVENT) | |
87 return NGX_OK; | |
88 | |
76 return ngx_kqueue_set_event(ev, event, EV_DELETE); | 89 return ngx_kqueue_set_event(ev, event, EV_DELETE); |
77 } | 90 } |
91 | |
78 | 92 |
79 int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags) | 93 int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags) |
80 { | 94 { |
81 struct timespec ts = { 0, 0 }; | 95 struct timespec ts = { 0, 0 }; |
82 ngx_connection_t *cn = (ngx_connection_t *) ev->data; | 96 ngx_connection_t *cn = (ngx_connection_t *) ev->data; |
108 nchanges++; | 122 nchanges++; |
109 | 123 |
110 return NGX_OK; | 124 return NGX_OK; |
111 } | 125 } |
112 | 126 |
127 | |
113 int ngx_kqueue_process_events(ngx_log_t *log) | 128 int ngx_kqueue_process_events(ngx_log_t *log) |
114 { | 129 { |
115 int events, i; | 130 int events, i; |
116 u_int timer = 0, delta = 0; | 131 u_int timer, delta; |
117 ngx_event_t *ev; | 132 ngx_event_t *ev; |
118 struct timeval tv; | 133 struct timeval tv; |
119 struct timespec ts, *tp = NULL; | 134 struct timespec ts, *tp; |
135 | |
136 timer = 0; | |
137 delta = 0; | |
138 tp = NULL; | |
120 | 139 |
121 if (timer_queue.timer_next != &timer_queue) { | 140 if (timer_queue.timer_next != &timer_queue) { |
122 timer = timer_queue.timer_next->timer_delta; | 141 timer = timer_queue.timer_next->timer_delta; |
123 ts.tv_sec = timer / 1000; | 142 ts.tv_sec = timer / 1000; |
124 ts.tv_nsec = (timer % 1000) * 1000000; | 143 ts.tv_nsec = (timer % 1000) * 1000000; |
210 } | 229 } |
211 | 230 |
212 return NGX_OK; | 231 return NGX_OK; |
213 } | 232 } |
214 | 233 |
234 | |
215 void ngx_kqueue_add_timer(ngx_event_t *ev, ngx_msec_t timer) | 235 void ngx_kqueue_add_timer(ngx_event_t *ev, ngx_msec_t timer) |
216 { | 236 { |
217 ngx_event_t *e; | 237 ngx_event_t *e; |
218 | 238 |
219 ngx_log_debug(ev->log, "set timer: %d" _ timer); | 239 ngx_log_debug(ev->log, "set timer: %d" _ timer); |