comparison src/event/modules/ngx_kqueue_module.c @ 36:c14d7232b11f

nginx-0.0.1-2002-12-23-09:29:22 import
author Igor Sysoev <igor@sysoev.ru>
date Mon, 23 Dec 2002 06:29:22 +0000
parents d45effe5854c
children 2ffaa35fba42
comparison
equal deleted inserted replaced
35:79c1fce18e71 36:c14d7232b11f
59 59
60 int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) 60 int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags)
61 { 61 {
62 ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1: 0; 62 ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1: 0;
63 63
64 return ngx_kqueue_set_event(ev, event, EV_ADD | flags); 64 #if 1
65 } 65 if (nchanges > 0
66 66 && ev->index < nchanges
67
68 int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags)
69 {
70 ngx_event_t *e;
71
72 if (nchanges > 0 && ev->index < nchanges
73 && change_list[ev->index].udata == ev) 67 && change_list[ev->index].udata == ev)
74 { 68 {
75 ngx_connection_t *cn = (ngx_connection_t *) ev->data; 69 /* DEBUG */
76 ngx_log_debug(ev->log, "kqueue del event: %d: ft:%d" _ 70 ngx_connection_t *c = (ngx_connection_t *) ev->data;
77 cn->fd _ event); 71 ngx_log_debug(ev->log, "kqueue add event: %d: ft:%d" _ c->fd _ event);
72
73 change_list[ev->index].filter = event;
74 change_list[ev->index].flags = flags;
75
76 return NGX_OK;
77 }
78 #endif
79
80 return ngx_kqueue_set_event(ev, event, EV_ADD | flags);
81 }
82
83
84 int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags)
85 {
86 ngx_event_t *e;
87
88 if (nchanges > 0
89 && ev->index < nchanges
90 && change_list[ev->index].udata == ev)
91 {
92 /* DEBUG */
93 ngx_connection_t *c = (ngx_connection_t *) ev->data;
94 ngx_log_debug(ev->log, "kqueue del event: %d: ft:%d" _ c->fd _ event);
78 95
79 if (ev->index < --nchanges) { 96 if (ev->index < --nchanges) {
80 e = (ngx_event_t *) change_list[nchanges].udata; 97 e = (ngx_event_t *) change_list[nchanges].udata;
81 change_list[ev->index] = change_list[nchanges]; 98 change_list[ev->index] = change_list[nchanges];
82 e->index = ev->index; 99 e->index = ev->index;
93 110
94 111
95 int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags) 112 int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags)
96 { 113 {
97 struct timespec ts; 114 struct timespec ts;
98 ngx_connection_t *cn; 115 ngx_connection_t *c;
99 116
100 cn = (ngx_connection_t *) ev->data; 117 c = (ngx_connection_t *) ev->data;
101 118
102 ngx_log_debug(ev->log, "kqueue set event: %d: ft:%d f:%08x" _ 119 ngx_log_debug(ev->log, "kqueue set event: %d: ft:%d f:%08x" _
103 cn->fd _ filter _ flags); 120 c->fd _ filter _ flags);
104 121
105 if (nchanges >= nevents) { 122 if (nchanges >= nevents) {
106 ngx_log_error(NGX_LOG_WARN, ev->log, 0, 123 ngx_log_error(NGX_LOG_WARN, ev->log, 0,
107 "kqueue change list is filled up"); 124 "kqueue change list is filled up");
108 125
114 return NGX_ERROR; 131 return NGX_ERROR;
115 } 132 }
116 nchanges = 0; 133 nchanges = 0;
117 } 134 }
118 135
119 change_list[nchanges].ident = cn->fd; 136 change_list[nchanges].ident = c->fd;
120 change_list[nchanges].filter = filter; 137 change_list[nchanges].filter = filter;
121 change_list[nchanges].flags = flags; 138 change_list[nchanges].flags = flags;
122 change_list[nchanges].fflags = 0; 139 change_list[nchanges].fflags = 0;
123 change_list[nchanges].data = 0; 140 change_list[nchanges].data = 0;
124 change_list[nchanges].udata = ev; 141 change_list[nchanges].udata = ev;
125 142
143 #if 0
126 if (flags == EV_ADD) 144 if (flags == EV_ADD)
145 #endif
127 ev->index = nchanges; 146 ev->index = nchanges;
128 147
129 nchanges++; 148 nchanges++;
130 149
131 return NGX_OK; 150 return NGX_OK;
137 int events, i; 156 int events, i;
138 u_int timer, delta; 157 u_int timer, delta;
139 ngx_event_t *ev; 158 ngx_event_t *ev;
140 struct timeval tv; 159 struct timeval tv;
141 struct timespec ts, *tp; 160 struct timespec ts, *tp;
142
143 timer = 0;
144 delta = 0;
145 tp = NULL;
146 161
147 if (timer_queue.timer_next != &timer_queue) { 162 if (timer_queue.timer_next != &timer_queue) {
148 timer = timer_queue.timer_next->timer_delta; 163 timer = timer_queue.timer_next->timer_delta;
149 ts.tv_sec = timer / 1000; 164 ts.tv_sec = timer / 1000;
150 ts.tv_nsec = (timer % 1000) * 1000000; 165 ts.tv_nsec = (timer % 1000) * 1000000;
151 tp = &ts; 166 tp = &ts;
152 gettimeofday(&tv, NULL); 167 gettimeofday(&tv, NULL);
153 delta = tv.tv_sec * 1000 + tv.tv_usec / 1000; 168 delta = tv.tv_sec * 1000 + tv.tv_usec / 1000;
169
170 } else {
171 timer = 0;
172 delta = 0;
173 tp = NULL;
154 } 174 }
155 175
156 ngx_log_debug(log, "kevent timer: %d" _ timer); 176 ngx_log_debug(log, "kevent timer: %d" _ timer);
157 177
158 events = kevent(kq, change_list, nchanges, event_list, nevents, tp); 178 events = kevent(kq, change_list, nchanges, event_list, nevents, tp);