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