Lines Matching refs:devpollop
58 struct devpollop { struct
87 devpoll_commit(struct devpollop *devpollop) in devpoll_commit() argument
93 if (pwrite(devpollop->dpfd, devpollop->changes, in devpoll_commit()
94 sizeof(struct pollfd) * devpollop->nchanges, 0) == -1) in devpoll_commit()
97 devpollop->nchanges = 0; in devpoll_commit()
102 devpoll_queue(struct devpollop *devpollop, int fd, int events) { in devpoll_queue() argument
105 if (devpollop->nchanges >= devpollop->nevents) { in devpoll_queue()
110 if (devpoll_commit(devpollop) != 0) in devpoll_queue()
114 pfd = &devpollop->changes[devpollop->nchanges++]; in devpoll_queue()
127 struct devpollop *devpollop; in devpoll_init() local
129 if (!(devpollop = mm_calloc(1, sizeof(struct devpollop)))) in devpoll_init()
139 mm_free(devpollop); in devpoll_init()
143 devpollop->dpfd = dpfd; in devpoll_init()
148 devpollop->events = mm_calloc(nfiles, sizeof(struct pollfd)); in devpoll_init()
149 if (devpollop->events == NULL) { in devpoll_init()
150 mm_free(devpollop); in devpoll_init()
154 devpollop->nevents = nfiles; in devpoll_init()
156 devpollop->changes = mm_calloc(nfiles, sizeof(struct pollfd)); in devpoll_init()
157 if (devpollop->changes == NULL) { in devpoll_init()
158 mm_free(devpollop->events); in devpoll_init()
159 mm_free(devpollop); in devpoll_init()
166 return (devpollop); in devpoll_init()
172 struct devpollop *devpollop = base->evbase; in devpoll_dispatch() local
173 struct pollfd *events = devpollop->events; in devpoll_dispatch()
177 if (devpollop->nchanges) in devpoll_dispatch()
178 devpoll_commit(devpollop); in devpoll_dispatch()
183 dvp.dp_fds = devpollop->events; in devpoll_dispatch()
184 dvp.dp_nfds = devpollop->nevents; in devpoll_dispatch()
189 res = ioctl(devpollop->dpfd, DP_POLL, &dvp); in devpoll_dispatch()
232 struct devpollop *devpollop = base->evbase; in devpoll_add() local
249 if (devpoll_queue(devpollop, fd, res) != 0) in devpoll_add()
258 struct devpollop *devpollop = base->evbase; in devpoll_del() local
275 if (devpoll_queue(devpollop, fd, POLLREMOVE) != 0) in devpoll_del()
286 devpoll_queue(devpollop, fd, POLLOUT); in devpoll_del()
289 devpoll_queue(devpollop, fd, POLLIN); in devpoll_del()
299 struct devpollop *devpollop = base->evbase; in devpoll_dealloc() local
302 if (devpollop->events) in devpoll_dealloc()
303 mm_free(devpollop->events); in devpoll_dealloc()
304 if (devpollop->changes) in devpoll_dealloc()
305 mm_free(devpollop->changes); in devpoll_dealloc()
306 if (devpollop->dpfd >= 0) in devpoll_dealloc()
307 close(devpollop->dpfd); in devpoll_dealloc()
309 memset(devpollop, 0, sizeof(struct devpollop)); in devpoll_dealloc()
310 mm_free(devpollop); in devpoll_dealloc()