MCPcopy Create free account
hub / github.com/alibaba/PhotonLibOS / wait_for_fd

Method wait_for_fd

io/kqueue.cpp:102–121  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

100 }
101
102 int wait_for_fd(int fd, uint32_t interests, Timeout timeout) override {
103 if (unlikely(interests == 0)) {
104 errno = ENOSYS;
105 return -1;
106 }
107 auto current = CURRENT;
108 short ev = (interests == EVENT_READ) ? EVFILT_READ : EVFILT_WRITE;
109 int ret = enqueue(fd, ev, EV_ADD | EV_ONESHOT, 0, current);
110 if (ret < 0) return ret;
111 SCOPED_PAUSE_WORK_STEALING;
112 ret = thread_usleep(timeout);
113 ERRNO err;
114 if (likely(ret == -1 && err.no == EOK)) {
115 return 0; // event arrived
116 }
117
118 enqueue(fd, ev, EV_DELETE, 0, current, true);
119 errno = (ret == 0) ? ETIMEDOUT : err.no;
120 return -1;
121 }
122
123 ssize_t wait_and_fire_events(uint64_t timeout) override {
124 ssize_t nev = 0;

Callers 1

closeMethod · 0.45

Calls 3

unlikelyFunction · 0.50
thread_usleepFunction · 0.50
likelyFunction · 0.50

Tested by

no test coverage detected