| 59 | } |
| 60 | |
| 61 | int |
| 62 | EventIO::modify(int e) |
| 63 | { |
| 64 | if (!this->syscall) { |
| 65 | return 0; |
| 66 | } |
| 67 | |
| 68 | ink_assert(event_loop); |
| 69 | #if TS_USE_EPOLL && !defined(USE_EDGE_TRIGGER) |
| 70 | struct epoll_event ev; |
| 71 | memset(&ev, 0, sizeof(ev)); |
| 72 | int new_events = events, old_events = events; |
| 73 | if (e < 0) |
| 74 | new_events &= ~(-e); |
| 75 | else |
| 76 | new_events |= e; |
| 77 | events = new_events; |
| 78 | ev.events = new_events; |
| 79 | ev.data.ptr = this; |
| 80 | if (!new_events) |
| 81 | return epoll_ctl(event_loop->epoll_fd, EPOLL_CTL_DEL, fd, &ev); |
| 82 | else if (!old_events) |
| 83 | return epoll_ctl(event_loop->epoll_fd, EPOLL_CTL_ADD, fd, &ev); |
| 84 | else |
| 85 | return epoll_ctl(event_loop->epoll_fd, EPOLL_CTL_MOD, fd, &ev); |
| 86 | #endif |
| 87 | #if TS_USE_KQUEUE && !defined(USE_EDGE_TRIGGER) |
| 88 | int n = 0; |
| 89 | struct kevent ev[2]; |
| 90 | int ee = events; |
| 91 | if (e < 0) { |
| 92 | ee &= ~(-e); |
| 93 | if ((-e) & EVENTIO_READ) |
| 94 | EV_SET(&ev[n++], fd, EVFILT_READ, EV_DELETE, 0, 0, this); |
| 95 | if ((-e) & EVENTIO_WRITE) |
| 96 | EV_SET(&ev[n++], fd, EVFILT_WRITE, EV_DELETE, 0, 0, this); |
| 97 | } else { |
| 98 | ee |= e; |
| 99 | if (e & EVENTIO_READ) |
| 100 | EV_SET(&ev[n++], fd, EVFILT_READ, EV_ADD | INK_EV_EDGE_TRIGGER, 0, 0, this); |
| 101 | if (e & EVENTIO_WRITE) |
| 102 | EV_SET(&ev[n++], fd, EVFILT_WRITE, EV_ADD | INK_EV_EDGE_TRIGGER, 0, 0, this); |
| 103 | } |
| 104 | events = ee; |
| 105 | if (n) |
| 106 | return kevent(event_loop->kqueue_fd, &ev[0], n, nullptr, 0, nullptr); |
| 107 | else |
| 108 | return 0; |
| 109 | #endif |
| 110 | (void)e; // ATS_UNUSED |
| 111 | return 0; |
| 112 | } |
| 113 | |
| 114 | int |
| 115 | EventIO::refresh(int e) |
no test coverage detected