Lines Matching refs:devpollop
59 struct devpollop { struct
88 devpoll_commit(struct devpollop *devpollop) in devpoll_commit() argument
94 if (pwrite(devpollop->dpfd, devpollop->changes, in devpoll_commit()
95 sizeof(struct pollfd) * devpollop->nchanges, 0) == -1) in devpoll_commit()
98 devpollop->nchanges = 0; in devpoll_commit()
103 devpoll_queue(struct devpollop *devpollop, int fd, int events) { in devpoll_queue() argument
106 if (devpollop->nchanges >= devpollop->nevents) { in devpoll_queue()
111 if (devpoll_commit(devpollop) != 0) in devpoll_queue()
115 pfd = &devpollop->changes[devpollop->nchanges++]; in devpoll_queue()
128 struct devpollop *devpollop; in devpoll_init() local
130 if (!(devpollop = mm_calloc(1, sizeof(struct devpollop)))) in devpoll_init()
140 mm_free(devpollop); in devpoll_init()
144 devpollop->dpfd = dpfd; in devpoll_init()
149 devpollop->events = mm_calloc(nfiles, sizeof(struct pollfd)); in devpoll_init()
150 if (devpollop->events == NULL) { in devpoll_init()
151 mm_free(devpollop); in devpoll_init()
155 devpollop->nevents = nfiles; in devpoll_init()
157 devpollop->changes = mm_calloc(nfiles, sizeof(struct pollfd)); in devpoll_init()
158 if (devpollop->changes == NULL) { in devpoll_init()
159 mm_free(devpollop->events); in devpoll_init()
160 mm_free(devpollop); in devpoll_init()
167 return (devpollop); in devpoll_init()
173 struct devpollop *devpollop = base->evbase; in devpoll_dispatch() local
174 struct pollfd *events = devpollop->events; in devpoll_dispatch()
178 if (devpollop->nchanges) in devpoll_dispatch()
179 devpoll_commit(devpollop); in devpoll_dispatch()
184 dvp.dp_fds = devpollop->events; in devpoll_dispatch()
185 dvp.dp_nfds = devpollop->nevents; in devpoll_dispatch()
190 res = ioctl(devpollop->dpfd, DP_POLL, &dvp); in devpoll_dispatch()
233 struct devpollop *devpollop = base->evbase; in devpoll_add() local
250 if (devpoll_queue(devpollop, fd, res) != 0) in devpoll_add()
259 struct devpollop *devpollop = base->evbase; in devpoll_del() local
276 if (devpoll_queue(devpollop, fd, POLLREMOVE) != 0) in devpoll_del()
287 devpoll_queue(devpollop, fd, POLLOUT); in devpoll_del()
290 devpoll_queue(devpollop, fd, POLLIN); in devpoll_del()
300 struct devpollop *devpollop = base->evbase; in devpoll_dealloc() local
303 if (devpollop->events) in devpoll_dealloc()
304 mm_free(devpollop->events); in devpoll_dealloc()
305 if (devpollop->changes) in devpoll_dealloc()
306 mm_free(devpollop->changes); in devpoll_dealloc()
307 if (devpollop->dpfd >= 0) in devpoll_dealloc()
308 close(devpollop->dpfd); in devpoll_dealloc()
310 memset(devpollop, 0, sizeof(struct devpollop)); in devpoll_dealloc()
311 mm_free(devpollop); in devpoll_dealloc()