37 loop->poll_fds = NULL;
38 loop->poll_fds_used = 0;
39 loop->poll_fds_size = 0;
40 loop->poll_fds_iterating = 0;
46 loop->poll_fds = NULL;
60 if (
loop->poll_fds_used <
loop->poll_fds_size)
63 n =
loop->poll_fds_size ?
loop->poll_fds_size * 2 : 64;
69 for (
i =
loop->poll_fds_size;
i <
n;
i++) {
70 loop->poll_fds[
i].fd = -1;
71 loop->poll_fds[
i].events = 0;
72 loop->poll_fds[
i].revents = 0;
74 loop->poll_fds_size =
n;
80 pfd =
loop->poll_fds[
l];
82 loop->poll_fds[
r] = pfd;
91 assert(!
loop->poll_fds_iterating);
92 for (
i = 0;
i <
loop->poll_fds_used; ++
i) {
93 if (
loop->poll_fds[
i].fd == w->
fd) {
101 pe = &
loop->poll_fds[
loop->poll_fds_used++];
109 assert(!
loop->poll_fds_iterating);
110 for (
i = 0;
i <
loop->poll_fds_used;) {
111 if (
loop->poll_fds[
i].fd == fd) {
113 --
loop->poll_fds_used;
115 loop->poll_fds[
loop->poll_fds_used].fd = -1;
116 loop->poll_fds[
loop->poll_fds_used].events = 0;
117 loop->poll_fds[
loop->poll_fds_used].revents = 0;
142 unsigned int nevents;
148 if (
loop->nfds == 0) {
162 assert(w->
fd < (
int)
loop->nwatchers);
174 sigaddset(pset, SIGPROF);
178 time_base =
loop->time;
186 if (pthread_sigmask(SIG_BLOCK, pset, NULL))
190 if (pthread_sigmask(SIG_UNBLOCK, pset, NULL))
221 loop->poll_fds_iterating = 1;
228 for (
i = 0;
i <
loop->poll_fds_used;
i++) {
229 pe =
loop->poll_fds +
i;
237 assert((
unsigned) fd < loop->nwatchers);
239 w =
loop->watchers[fd];
250 pe->revents &= w->
pevents | POLLERR | POLLHUP;
252 if (pe->revents != 0) {
254 if (w == &
loop->signal_io_watcher) {
257 w->
cb(
loop, w, pe->revents);
264 if (have_signals != 0)
265 loop->signal_io_watcher.cb(
loop, &
loop->signal_io_watcher, POLLIN);
267 loop->poll_fds_iterating = 0;
272 if (have_signals != 0)
287 time_diff =
loop->time - time_base;
303 if (
loop->poll_fds_iterating) {
305 for (
i = 0;
i <
loop->poll_fds_used;
i++)
306 if (
loop->poll_fds[
i].fd == fd) {
307 loop->poll_fds[
i].fd = -1;
308 loop->poll_fds[
i].events = 0;
309 loop->poll_fds[
i].revents = 0;
323 p[0].events = POLLIN;
327 while (rv == -1 && (errno == EINTR || errno == EAGAIN));
332 if (
p[0].revents & POLLNVAL)