Mercurial > hg > nginx
comparison src/event/modules/ngx_devpoll_module.c @ 305:4b1a3a4acc60
nginx-0.0.3-2004-04-02-19:13:20 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 02 Apr 2004 15:13:20 +0000 |
parents | 008276b9e061 |
children | a0beefedaf94 |
comparison
equal
deleted
inserted
replaced
304:bcbe876f4262 | 305:4b1a3a4acc60 |
---|---|
34 static int ngx_devpoll_init(ngx_cycle_t *cycle); | 34 static int ngx_devpoll_init(ngx_cycle_t *cycle); |
35 static void ngx_devpoll_done(ngx_cycle_t *cycle); | 35 static void ngx_devpoll_done(ngx_cycle_t *cycle); |
36 static int ngx_devpoll_add_event(ngx_event_t *ev, int event, u_int flags); | 36 static int ngx_devpoll_add_event(ngx_event_t *ev, int event, u_int flags); |
37 static int ngx_devpoll_del_event(ngx_event_t *ev, int event, u_int flags); | 37 static int ngx_devpoll_del_event(ngx_event_t *ev, int event, u_int flags); |
38 static int ngx_devpoll_set_event(ngx_event_t *ev, int event, u_int flags); | 38 static int ngx_devpoll_set_event(ngx_event_t *ev, int event, u_int flags); |
39 static int ngx_devpoll_process_events(ngx_log_t *log); | 39 static int ngx_devpoll_process_events(ngx_cycle_t *cycle); |
40 | 40 |
41 static void *ngx_devpoll_create_conf(ngx_cycle_t *cycle); | 41 static void *ngx_devpoll_create_conf(ngx_cycle_t *cycle); |
42 static char *ngx_devpoll_init_conf(ngx_cycle_t *cycle, void *conf); | 42 static char *ngx_devpoll_init_conf(ngx_cycle_t *cycle, void *conf); |
43 | 43 |
44 static int dp = -1; | 44 static int dp = -1; |
306 | 306 |
307 return NGX_OK; | 307 return NGX_OK; |
308 } | 308 } |
309 | 309 |
310 | 310 |
311 int ngx_devpoll_process_events(ngx_log_t *log) | 311 int ngx_devpoll_process_events(ngx_cycle_t *cycle) |
312 { | 312 { |
313 int events, i, j; | 313 int events; |
314 ngx_int_t i; | |
315 ngx_uint_t j; | |
314 size_t n; | 316 size_t n; |
315 ngx_msec_t timer; | 317 ngx_msec_t timer; |
316 ngx_err_t err; | 318 ngx_err_t err; |
317 ngx_cycle_t **cycle; | 319 ngx_cycle_t **old_cycle; |
318 ngx_connection_t *c; | 320 ngx_connection_t *c; |
319 ngx_epoch_msec_t delta; | 321 ngx_epoch_msec_t delta; |
320 struct dvpoll dvp; | 322 struct dvpoll dvp; |
321 struct timeval tv; | 323 struct timeval tv; |
322 | 324 |
325 | 327 |
326 if (timer == 0) { | 328 if (timer == 0) { |
327 timer = (ngx_msec_t) INFTIM; | 329 timer = (ngx_msec_t) INFTIM; |
328 } | 330 } |
329 | 331 |
330 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "devpoll timer: %d", timer); | 332 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
333 "devpoll timer: %d", timer); | |
331 | 334 |
332 if (nchanges) { | 335 if (nchanges) { |
333 n = nchanges * sizeof(struct pollfd); | 336 n = nchanges * sizeof(struct pollfd); |
334 if (write(dp, change_list, n) != (ssize_t) n) { | 337 if (write(dp, change_list, n) != (ssize_t) n) { |
335 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, | 338 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
336 "write(/dev/poll) failed"); | 339 "write(/dev/poll) failed"); |
337 return NGX_ERROR; | 340 return NGX_ERROR; |
338 } | 341 } |
339 } | 342 } |
340 | 343 |
357 delta = ngx_elapsed_msec; | 360 delta = ngx_elapsed_msec; |
358 ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec; | 361 ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec; |
359 | 362 |
360 if (err) { | 363 if (err) { |
361 ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT, | 364 ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT, |
362 log, err, "ioctl(DP_POLL) failed"); | 365 cycle->log, err, "ioctl(DP_POLL) failed"); |
363 return NGX_ERROR; | 366 return NGX_ERROR; |
364 } | 367 } |
365 | 368 |
366 if (timer != (ngx_msec_t) INFTIM) { | 369 if (timer != (ngx_msec_t) INFTIM) { |
367 delta = ngx_elapsed_msec - delta; | 370 delta = ngx_elapsed_msec - delta; |
368 | 371 |
369 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0, | 372 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
370 "devpoll timer: %d, delta: %d", timer, (int) delta); | 373 "devpoll timer: %d, delta: %d", timer, (int) delta); |
371 } else { | 374 } else { |
372 if (events == 0) { | 375 if (events == 0) { |
373 ngx_log_error(NGX_LOG_ALERT, log, 0, | 376 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, |
374 "ioctl(DP_POLL) returned no events without timeout"); | 377 "ioctl(DP_POLL) returned no events without timeout"); |
375 return NGX_ERROR; | 378 return NGX_ERROR; |
376 } | 379 } |
377 } | 380 } |
378 | 381 |
379 for (i = 0; i < events; i++) { | 382 for (i = 0; i < events; i++) { |
380 c = &ngx_cycle->connections[event_list[i].fd]; | 383 c = &ngx_cycle->connections[event_list[i].fd]; |
381 | 384 |
382 if (c->fd == -1) { | 385 if (c->fd == -1) { |
383 cycle = ngx_old_cycles.elts; | 386 old_cycle = ngx_old_cycles.elts; |
384 for (j = 0; j < ngx_old_cycles.nelts; j++) { | 387 for (j = 0; j < ngx_old_cycles.nelts; j++) { |
385 if (cycle[i] == NULL) { | 388 if (old_cycle[j] == NULL) { |
386 continue; | 389 continue; |
387 } | 390 } |
388 c = &cycle[j]->connections[event_list[i].fd]; | 391 c = &old_cycle[j]->connections[event_list[i].fd]; |
389 if (c->fd != -1) { | 392 if (c->fd != -1) { |
390 break; | 393 break; |
391 } | 394 } |
392 } | 395 } |
393 } | 396 } |
394 | 397 |
395 if (c->fd == -1) { | 398 if (c->fd == -1) { |
396 ngx_log_error(NGX_LOG_EMERG, log, 0, "unknown cycle"); | 399 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, "unknown cycle"); |
397 exit(1); | 400 exit(1); |
398 } | 401 } |
399 | 402 |
400 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0, | 403 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
401 "devpoll: fd:%d, ev:%04X, rev:%04X", | 404 "devpoll: fd:%d, ev:%04X, rev:%04X", |
402 event_list[i].fd, | 405 event_list[i].fd, |
403 event_list[i].events, event_list[i].revents); | 406 event_list[i].events, event_list[i].revents); |
404 | 407 |
405 if (event_list[i].revents & (POLLERR|POLLHUP|POLLNVAL)) { | 408 if (event_list[i].revents & (POLLERR|POLLHUP|POLLNVAL)) { |
406 ngx_log_error(NGX_LOG_ALERT, log, 0, | 409 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, |
407 "ioctl(DP_POLL) error fd:%d ev:%04X rev:%04X", | 410 "ioctl(DP_POLL) error fd:%d ev:%04X rev:%04X", |
408 event_list[i].fd, | 411 event_list[i].fd, |
409 event_list[i].events, event_list[i].revents); | 412 event_list[i].events, event_list[i].revents); |
410 } | 413 } |
411 | 414 |
412 if (event_list[i].revents & ~(POLLIN|POLLOUT|POLLERR|POLLHUP|POLLNVAL)) | 415 if (event_list[i].revents & ~(POLLIN|POLLOUT|POLLERR|POLLHUP|POLLNVAL)) |
413 { | 416 { |
414 ngx_log_error(NGX_LOG_ALERT, log, 0, | 417 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, |
415 "strange ioctl(DP_POLL) events " | 418 "strange ioctl(DP_POLL) events " |
416 "fd:%d ev:%04X rev:%04X", | 419 "fd:%d ev:%04X rev:%04X", |
417 event_list[i].fd, | 420 event_list[i].fd, |
418 event_list[i].events, event_list[i].revents); | 421 event_list[i].events, event_list[i].revents); |
419 } | 422 } |