comparison src/event/modules/ngx_poll_module.c @ 250:1903c6821958

nginx-0.0.2-2004-02-03-23:27:11 import
author Igor Sysoev <igor@sysoev.ru>
date Tue, 03 Feb 2004 20:27:11 +0000
parents e885208c518b
children c31c40540318
comparison
equal deleted inserted replaced
249:2a0540287298 250:1903c6821958
128 ngx_event_t *e; 128 ngx_event_t *e;
129 ngx_connection_t *c; 129 ngx_connection_t *c;
130 130
131 c = ev->data; 131 c = ev->data;
132 132
133 if (ev->index != NGX_INVALID_INDEX) {
134 ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
135 "poll event fd:%d ev:%d is already set", c->fd, event);
136 return NGX_OK;
137 }
138
133 ev->active = 1; 139 ev->active = 1;
134 ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1 : 0; 140 ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1 : 0;
135 141
136 if (event == NGX_READ_EVENT) { 142 if (event == NGX_READ_EVENT) {
137 e = c->write; 143 e = c->write;
157 event_index[nevents] = ev; 163 event_index[nevents] = ev;
158 ev->index = nevents; 164 ev->index = nevents;
159 nevents++; 165 nevents++;
160 166
161 } else { 167 } else {
168 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0,
169 "poll index: %d", e->index);
170
162 event_list[e->index].events |= event; 171 event_list[e->index].events |= event;
163 ev->index = e->index; 172 ev->index = e->index;
164 } 173 }
165 174
166 return NGX_OK; 175 return NGX_OK;
193 202
194 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, 203 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
195 "poll del event: fd:%d ev:%d", c->fd, event); 204 "poll del event: fd:%d ev:%d", c->fd, event);
196 205
197 if (e == NULL || e->index == NGX_INVALID_INDEX) { 206 if (e == NULL || e->index == NGX_INVALID_INDEX) {
198 if (ev->index < (u_int) --nevents) { 207 nevents--;
208
209 if (ev->index < (u_int) nevents) {
199 event_list[ev->index] = event_list[nevents]; 210 event_list[ev->index] = event_list[nevents];
200 event_index[ev->index] = event_index[nevents]; 211 event_index[ev->index] = event_index[nevents];
201 event_index[ev->index]->index = ev->index; 212 event_index[ev->index]->index = ev->index;
202 } 213 }
203 214
204 } else { 215 } else {
216 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0,
217 "poll index: %d", e->index);
218
205 event_list[e->index].events &= ~event; 219 event_list[e->index].events &= ~event;
206 } 220 }
207 221
208 ev->active = 0; 222 ev->active = 0;
209 ev->index = NGX_INVALID_INDEX; 223 ev->index = NGX_INVALID_INDEX;
230 timer = (ngx_msec_t) INFTIM; 244 timer = (ngx_msec_t) INFTIM;
231 } 245 }
232 246
233 #if (NGX_DEBUG) 247 #if (NGX_DEBUG)
234 for (i = 0; i < nevents; i++) { 248 for (i = 0; i < nevents; i++) {
235 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0, "poll: fd:%d ev:%04X", 249 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0, "poll: %d: fd:%d ev:%04X",
236 event_list[i].fd, event_list[i].events); 250 i, event_list[i].fd, event_list[i].events);
237 } 251 }
238 252
239 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "poll timer: %d", timer); 253 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "poll timer: %d", timer);
240 #endif 254 #endif
241 255
276 290
277 nready = 0; 291 nready = 0;
278 292
279 for (i = 0; i < nevents && ready; i++) { 293 for (i = 0; i < nevents && ready; i++) {
280 294
281 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0, 295 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, log, 0,
282 "poll: fd:%d ev:%04X rev:%04X", 296 "poll: %d: fd:%d ev:%04X rev:%04X",
283 event_list[i].fd, 297 i, event_list[i].fd,
284 event_list[i].events, event_list[i].revents); 298 event_list[i].events, event_list[i].revents);
285 299
286 if (event_list[i].revents & (POLLERR|POLLHUP|POLLNVAL)) { 300 if (event_list[i].revents & (POLLERR|POLLHUP|POLLNVAL)) {
287 ngx_log_error(NGX_LOG_ALERT, log, 0, 301 ngx_log_error(NGX_LOG_ALERT, log, 0,
288 "poll() error fd:%d ev:%04X rev:%04X", 302 "poll() error fd:%d ev:%04X rev:%04X",
313 } 327 }
314 } 328 }
315 329
316 if (c->fd == -1) { 330 if (c->fd == -1) {
317 ngx_log_error(NGX_LOG_ALERT, log, 0, "unknown cycle"); 331 ngx_log_error(NGX_LOG_ALERT, log, 0, "unknown cycle");
332
333 /*
334 * it is certainly our fault and it should be investigated,
335 * in the meantime we disable this event to avoid a CPU spinning
336 */
337
338 if (i == nevents - 1) {
339 nevents--;
340 } else {
341 event_list[i].fd = -1;
342 }
343
318 continue; 344 continue;
319 } 345 }
320 346
321 found = 0; 347 found = 0;
322 348