Mercurial > hg > nginx
comparison src/event/modules/ngx_kqueue_module.c @ 32:d45effe5854c
nginx-0.0.1-2002-12-19-10:08:55 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 19 Dec 2002 07:08:55 +0000 |
parents | 53cb81681040 |
children | c14d7232b11f |
comparison
equal
deleted
inserted
replaced
31:d1ebcc555037 | 32:d45effe5854c |
---|---|
25 /* */ | 25 /* */ |
26 | 26 |
27 | 27 |
28 int ngx_kqueue_init(int max_connections, ngx_log_t *log) | 28 int ngx_kqueue_init(int max_connections, ngx_log_t *log) |
29 { | 29 { |
30 int size = sizeof(struct kevent) * 512; | 30 int size; |
31 | 31 |
32 size = sizeof(struct kevent) * 512; | |
32 nchanges = 0; | 33 nchanges = 0; |
33 nevents = 512; | 34 nevents = 512; |
34 | 35 |
35 kq = kqueue(); | 36 kq = kqueue(); |
36 | 37 |
66 | 67 |
67 int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags) | 68 int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags) |
68 { | 69 { |
69 ngx_event_t *e; | 70 ngx_event_t *e; |
70 | 71 |
71 if (ev->index < nchanges && change_list[ev->index].udata == ev) { | 72 if (nchanges > 0 && ev->index < nchanges |
72 | 73 && change_list[ev->index].udata == ev) |
74 { | |
73 ngx_connection_t *cn = (ngx_connection_t *) ev->data; | 75 ngx_connection_t *cn = (ngx_connection_t *) ev->data; |
74 ngx_log_debug(ev->log, "kqueue del event: %d: ft:%d" _ | 76 ngx_log_debug(ev->log, "kqueue del event: %d: ft:%d" _ |
75 cn->fd _ event); | 77 cn->fd _ event); |
76 | 78 |
77 if (ev->index < --nchanges) { | 79 if (ev->index < --nchanges) { |
90 } | 92 } |
91 | 93 |
92 | 94 |
93 int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags) | 95 int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags) |
94 { | 96 { |
95 struct timespec ts = { 0, 0 }; | 97 struct timespec ts; |
96 ngx_connection_t *cn = (ngx_connection_t *) ev->data; | 98 ngx_connection_t *cn; |
99 | |
100 cn = (ngx_connection_t *) ev->data; | |
97 | 101 |
98 ngx_log_debug(ev->log, "kqueue set event: %d: ft:%d f:%08x" _ | 102 ngx_log_debug(ev->log, "kqueue set event: %d: ft:%d f:%08x" _ |
99 cn->fd _ filter _ flags); | 103 cn->fd _ filter _ flags); |
100 | 104 |
101 if (nchanges >= nevents) { | 105 if (nchanges >= nevents) { |
102 ngx_log_error(NGX_LOG_WARN, ev->log, 0, | 106 ngx_log_error(NGX_LOG_WARN, ev->log, 0, |
103 "kqueue change list is filled up"); | 107 "kqueue change list is filled up"); |
108 | |
109 ts.tv_sec = 0; | |
110 ts.tv_nsec = 0; | |
104 | 111 |
105 if (kevent(kq, change_list, nchanges, NULL, 0, &ts) == -1) { | 112 if (kevent(kq, change_list, nchanges, NULL, 0, &ts) == -1) { |
106 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno, "kevent failed"); | 113 ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno, "kevent failed"); |
107 return NGX_ERROR; | 114 return NGX_ERROR; |
108 } | 115 } |
147 } | 154 } |
148 | 155 |
149 ngx_log_debug(log, "kevent timer: %d" _ timer); | 156 ngx_log_debug(log, "kevent timer: %d" _ timer); |
150 | 157 |
151 events = kevent(kq, change_list, nchanges, event_list, nevents, tp); | 158 events = kevent(kq, change_list, nchanges, event_list, nevents, tp); |
159 | |
152 if (events == -1) { | 160 if (events == -1) { |
153 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "kevent failed"); | 161 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "kevent failed"); |
154 return NGX_ERROR; | 162 return NGX_ERROR; |
155 } | 163 } |
156 | 164 |