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);