Deleted
Added
1 2/* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7#include <nxt_main.h> 8 --- 114 unchanged lines hidden (view full) --- 123 engine->u.devpoll.events = nxt_malloc(sizeof(struct pollfd) * mevents); 124 if (engine->u.devpoll.events == NULL) { 125 goto fail; 126 } 127 128 engine->u.devpoll.fd = open("/dev/poll", O_RDWR); 129 130 if (engine->u.devpoll.fd == -1) { |
131 nxt_alert(&engine->task, "open(\"/dev/poll\") failed %E", nxt_errno); |
132 goto fail; 133 } 134 135 nxt_debug(&engine->task, "open(\"/dev/poll\"): %d", engine->u.devpoll.fd); 136 137 return NXT_OK; 138 139fail: --- 9 unchanged lines hidden (view full) --- 149{ 150 nxt_fd_t fd; 151 152 fd = engine->u.devpoll.fd; 153 154 nxt_debug(&engine->task, "devpoll %d free", fd); 155 156 if (fd != -1 && close(fd) != 0) { |
157 nxt_alert(&engine->task, "devpoll close(%d) failed %E", fd, nxt_errno); |
158 } 159 160 nxt_free(engine->u.devpoll.events); 161 nxt_free(engine->u.devpoll.write_changes); 162 nxt_free(engine->u.devpoll.changes); 163 nxt_fd_event_hash_destroy(&engine->u.devpoll.fd_hash); 164 165 nxt_memzero(&engine->u.devpoll, sizeof(nxt_devpoll_engine_t)); --- 342 unchanged lines hidden (view full) --- 508 engine->u.devpoll.fd, fd, n); 509 510 if (n == 0) { 511 /* The file descriptor is not in the set. */ 512 return; 513 } 514 515 if (n == -1) { |
516 nxt_alert(&engine->task, "ioctl(%d, DP_ISPOLLED, %d) failed %E", 517 engine->u.devpoll.fd, fd, nxt_errno); |
518 /* Fall through. */ 519 } 520 521 /* n == 1: the file descriptor is in the set. */ 522 523 nxt_debug(&engine->task, "devpoll %d remove fd:%d", 524 engine->u.devpoll.fd, fd); 525 --- 15 unchanged lines hidden (view full) --- 541 nxt_debug(&engine->task, "devpoll write(%d) changes:%uz", fd, n); 542 543 n *= sizeof(struct pollfd); 544 545 if (nxt_slow_path(write(fd, pfd, n) == (ssize_t) n)) { 546 return NXT_OK; 547 } 548 |
549 nxt_alert(&engine->task, "devpoll write(%d) failed %E", fd, nxt_errno); |
550 551 return NXT_ERROR; 552} 553 554 555static void 556nxt_devpoll_poll(nxt_event_engine_t *engine, nxt_msec_t timeout) 557{ --- 25 unchanged lines hidden (view full) --- 583 err = (nevents == -1) ? nxt_errno : 0; 584 585 nxt_thread_time_update(engine->task.thread); 586 587 nxt_debug(&engine->task, "ioctl(%d, DP_POLL): %d", 588 engine->u.devpoll.fd, nevents); 589 590 if (nevents == -1) { |
591 level = (err == NXT_EINTR) ? NXT_LOG_INFO : NXT_LOG_ALERT; |
592 593 nxt_log(&engine->task, level, "ioctl(%d, DP_POLL) failed %E", 594 engine->u.devpoll.fd, err); 595 596 return; 597 } 598 599 for (i = 0; i < nevents; i++) { 600 601 pfd = &engine->u.devpoll.events[i]; 602 fd = pfd->fd; 603 events = pfd->revents; 604 605 ev = nxt_fd_event_hash_get(&engine->task, &engine->u.devpoll.fd_hash, 606 fd); 607 608 if (nxt_slow_path(ev == NULL)) { |
609 nxt_alert(&engine->task, 610 "ioctl(%d, DP_POLL) returned invalid " 611 "fd:%d ev:%04Xd rev:%04uXi", 612 engine->u.devpoll.fd, fd, pfd->events, events); |
613 614 nxt_devpoll_remove(engine, fd); 615 continue; 616 } 617 618 nxt_debug(ev->task, "devpoll: fd:%d ev:%04uXi rd:%d wr:%d", 619 fd, events, ev->read, ev->write); 620 621 if (nxt_slow_path(events & (POLLERR | POLLHUP | POLLNVAL)) != 0) { |
622 nxt_alert(ev->task, 623 "ioctl(%d, DP_POLL) error fd:%d ev:%04Xd rev:%04uXi", 624 engine->u.devpoll.fd, fd, pfd->events, events); |
625 626 nxt_work_queue_add(&engine->fast_work_queue, ev->error_handler, 627 ev->task, ev, ev->data); 628 continue; 629 } 630 631 if (events & POLLIN) { 632 ev->read_ready = 1; --- 29 unchanged lines hidden --- |