Lines Matching defs:pollmgr

45 struct pollmgr {
53 #define POLLMGR_CHFD_RD 0 /* - pollmgr side */
55 } pollmgr;
87 pollmgr.fds = NULL;
88 pollmgr.handlers = NULL;
89 pollmgr.capacity = 0;
90 pollmgr.nfds = 0;
93 pollmgr.chan[i][POLLMGR_CHFD_RD] = -1;
94 pollmgr.chan[i][POLLMGR_CHFD_WR] = -1;
99 status = socketpair(PF_LOCAL, SOCK_DGRAM, 0, pollmgr.chan[i]);
105 status = RTWinSocketPair(PF_INET, SOCK_DGRAM, 0, pollmgr.chan[i]);
117 malloc(newcap * sizeof(*pollmgr.fds));
124 malloc(newcap * sizeof(*pollmgr.handlers));
131 pollmgr.capacity = newcap;
132 pollmgr.fds = newfds;
133 pollmgr.handlers = newhdls;
135 pollmgr.nfds = POLLMGR_SLOT_STATIC_COUNT;
137 for (i = 0; i < pollmgr.capacity; ++i) {
138 pollmgr.fds[i].fd = INVALID_SOCKET;
139 pollmgr.fds[i].events = 0;
140 pollmgr.fds[i].revents = 0;
147 SOCKET *chan = pollmgr.chan[i];
159 * Must be called before pollmgr loop is started, so no locking.
169 pollmgr_add_at(slot, handler, pollmgr.chan[slot][POLLMGR_CHFD_RD], POLLIN);
170 return pollmgr.chan[slot][POLLMGR_CHFD_WR];
175 * Must be called from pollmgr loop (via callbacks), so no locking.
184 if (pollmgr.nfds == pollmgr.capacity) {
190 newcap = pollmgr.capacity * 2;
193 realloc(pollmgr.fds, newcap * sizeof(*pollmgr.fds));
200 pollmgr.fds = newfds; /* don't crash/leak if realloc(handlers) fails */
204 realloc(pollmgr.handlers, newcap * sizeof(*pollmgr.handlers));
213 pollmgr.handlers = newhdls;
214 pollmgr.capacity = newcap;
216 for (i = pollmgr.nfds; i < newcap; ++i) {
224 slot = pollmgr.nfds;
225 ++pollmgr.nfds;
235 pollmgr.fds[slot].fd = fd;
236 pollmgr.fds[slot].events = events;
237 pollmgr.fds[slot].revents = 0;
238 pollmgr.handlers[slot] = handler;
254 fd = pollmgr.chan[slot][POLLMGR_CHFD_WR];
310 LWIP_ASSERT1((nfds_t)slot < pollmgr.nfds);
312 pollmgr.fds[slot].events = events;
322 __func__, slot, pollmgr.fds[slot].fd));
324 pollmgr.fds[slot].fd = INVALID_SOCKET; /* see poll loop */
346 nready = poll(pollmgr.fds, pollmgr.nfds, -1);
348 int rc = RTWinPoll(pollmgr.fds, pollmgr.nfds,RT_INDEFINITE_WAIT, &nready);
374 for (i = 0; (nfds_t)i < pollmgr.nfds && nready > 0; ++i) {
379 fd = pollmgr.fds[i].fd;
380 revents = pollmgr.fds[i].revents;
402 handler = pollmgr.handlers[i];
435 if (nevents != pollmgr.fds[i].events) {
439 pollmgr.fds[i].events = nevents;
445 pollmgr.fds[i].fd = INVALID_SOCKET;
446 pollmgr.fds[i].events = 0;
447 pollmgr.fds[i].revents = 0;
448 pollmgr.handlers[i] = NULL;
455 pdelprev = &pollmgr.fds[i].fd;
457 pollmgr.fds[i].fd = INVALID_SOCKET; /* end of list (for now) */
458 pollmgr.fds[i].events = POLLMGR_GARBAGE;
459 pollmgr.fds[i].revents = 0;
460 pollmgr.handlers[i] = NULL;
478 const int last = pollmgr.nfds - 1;
484 if (pollmgr.fds[last].events == POLLMGR_GARBAGE /* garbage */
485 || pollmgr.fds[last].fd == INVALID_SOCKET) /* or killed */
488 --pollmgr.nfds;
491 /* congruent to delnext >= pollmgr.nfds test below */
496 const SOCKET delnext = pollmgr.fds[delfirst].fd;
499 pollmgr.fds[delfirst] = pollmgr.fds[last]; /* struct copy */
500 pollmgr.handlers[delfirst] = pollmgr.handlers[last];
501 pollmgr.handlers[delfirst]->slot = (int)delfirst;
502 --pollmgr.nfds;
504 if ((nfds_t)delnext >= pollmgr.nfds) {
512 pollmgr.fds[last].fd = INVALID_SOCKET;
513 pollmgr.fds[last].events = 0;
514 pollmgr.fds[last].revents = 0;
515 pollmgr.handlers[last] = NULL;