31
32
} ngx_devpoll_conf_t;
34
35
static ngx_int_t ngx_devpoll_init(ngx_cycle_t *cycle, ngx_msec_t timer);
35
36
static void ngx_devpoll_done(ngx_cycle_t *cycle);
36
static ngx_int_t ngx_devpoll_add_event(ngx_event_t *ev, int event, u_int flags);
37
static ngx_int_t ngx_devpoll_del_event(ngx_event_t *ev, int event, u_int flags);
38
static ngx_int_t ngx_devpoll_set_event(ngx_event_t *ev, int event, u_int flags);
37
static ngx_int_t ngx_devpoll_add_event(ngx_event_t *ev, ngx_int_t event,
39
static ngx_int_t ngx_devpoll_del_event(ngx_event_t *ev, ngx_int_t event,
41
static ngx_int_t ngx_devpoll_set_event(ngx_event_t *ev, ngx_int_t event,
39
43
static ngx_int_t ngx_devpoll_process_events(ngx_cycle_t *cycle,
40
44
ngx_msec_t timer, ngx_uint_t flags);
285
295
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0,
286
"devpoll fd:%d ev:%04Xd fl:%04Xd", c->fd, event, flags);
296
"devpoll fd:%d ev:%04Xi fl:%04Xi", c->fd, event, flags);
288
298
if (nchanges >= max_changes) {
289
299
ngx_log_error(NGX_LOG_WARN, ev->log, 0,
398
410
ngx_mutex_lock(ngx_posted_events_mutex);
400
412
for (i = 0; i < events; i++) {
401
c = ngx_cycle->files[event_list[i].fd];
404
if (c->read->closed) {
414
fd = event_list[i].fd;
415
revents = event_list[i].revents;
417
c = ngx_cycle->files[fd];
419
if (c == NULL || c->fd == -1) {
425
rc = ioctl(dp, DP_ISPOLLED, &pfd);
430
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
431
"ioctl(DP_ISPOLLED) failed for socket %d, event",
436
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
437
"phantom event %04Xd for closed and removed socket %d",
442
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
443
"unexpected event %04Xd for closed and removed socket %d, ",
444
"ioctl(DP_ISPOLLED) returned rc:%d, fd:%d, event %04Xd",
445
revents, fd, rc, pfd.fd, pfd.revents);
448
pfd.events = POLLREMOVE;
451
if (write(dp, &pfd, sizeof(struct pollfd))
452
!= (ssize_t) sizeof(struct pollfd))
454
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
455
"write(/dev/poll) for %d failed, fd");
458
if (close(fd) == -1) {
459
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
460
"close(%d) failed", fd);
408
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "unexpected event");
412
revents = event_list[i].revents;
414
469
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
415
470
"devpoll: fd:%d, ev:%04Xd, rev:%04Xd",
416
event_list[i].fd, event_list[i].events, revents);
471
fd, event_list[i].events, revents);
418
473
if (revents & (POLLERR|POLLHUP|POLLNVAL)) {
419
474
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
420
475
"ioctl(DP_POLL) error fd:%d ev:%04Xd rev:%04Xd",
421
event_list[i].fd, event_list[i].events, revents);
476
fd, event_list[i].events, revents);
424
479
if (revents & ~(POLLIN|POLLOUT|POLLERR|POLLHUP|POLLNVAL)) {
425
480
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
426
481
"strange ioctl(DP_POLL) events "
427
482
"fd:%d ev:%04Xd rev:%04Xd",
428
event_list[i].fd, event_list[i].events, revents);
483
fd, event_list[i].events, revents);
431
486
if ((revents & (POLLERR|POLLHUP|POLLNVAL))