Lines Matching refs:ospoll

72 struct ospoll {  struct
93 struct ospoll { struct
113 struct ospoll { argument
130 ospoll_find(struct ospoll *ospoll, int fd) in ospoll_find() argument
133 int hi = ospoll->num - 1; in ospoll_find()
138 int t = ospoll->fds[m]->fd; in ospoll_find()
141 int t = ospoll->fds[m].fd; in ospoll_find()
156 ospoll_clean_deleted(struct ospoll *ospoll) in ospoll_clean_deleted() argument
160 xorg_list_for_each_entry_safe(osfd, tmp, &ospoll->deleted, deleted) { in ospoll_clean_deleted()
201 struct ospoll *
205 struct ospoll *ospoll = calloc(1, sizeof (struct ospoll)); in ospoll_create() local
207 ospoll->ps = pollset_create(-1); in ospoll_create()
208 if (ospoll->ps < 0) { in ospoll_create()
209 free (ospoll); in ospoll_create()
212 return ospoll; in ospoll_create()
215 struct ospoll *ospoll = calloc(1, sizeof (struct ospoll)); in ospoll_create() local
217 ospoll->epoll_fd = port_create(); in ospoll_create()
218 if (ospoll->epoll_fd < 0) { in ospoll_create()
219 free (ospoll); in ospoll_create()
222 xorg_list_init(&ospoll->deleted); in ospoll_create()
223 return ospoll; in ospoll_create()
226 struct ospoll *ospoll = calloc(1, sizeof (struct ospoll)); in ospoll_create() local
228 ospoll->epoll_fd = epoll_create1(EPOLL_CLOEXEC); in ospoll_create()
229 if (ospoll->epoll_fd < 0) { in ospoll_create()
230 free (ospoll); in ospoll_create()
233 xorg_list_init(&ospoll->deleted); in ospoll_create()
234 return ospoll; in ospoll_create()
237 return calloc(1, sizeof (struct ospoll)); in ospoll_create()
242 ospoll_destroy(struct ospoll *ospoll) in ospoll_destroy() argument
245 if (ospoll) { in ospoll_destroy()
246 assert (ospoll->num == 0); in ospoll_destroy()
247 pollset_destroy(ospoll->ps); in ospoll_destroy()
248 free(ospoll->fds); in ospoll_destroy()
249 free(ospoll); in ospoll_destroy()
253 if (ospoll) { in ospoll_destroy()
254 assert (ospoll->num == 0); in ospoll_destroy()
255 close(ospoll->epoll_fd); in ospoll_destroy()
256 ospoll_clean_deleted(ospoll); in ospoll_destroy()
257 free(ospoll->fds); in ospoll_destroy()
258 free(ospoll); in ospoll_destroy()
262 if (ospoll) { in ospoll_destroy()
263 assert (ospoll->num == 0); in ospoll_destroy()
264 free (ospoll->fds); in ospoll_destroy()
265 free (ospoll->osfds); in ospoll_destroy()
266 free (ospoll); in ospoll_destroy()
272 ospoll_add(struct ospoll *ospoll, int fd, in ospoll_add() argument
277 int pos = ospoll_find(ospoll, fd); in ospoll_add()
280 if (ospoll->num == ospoll->size) { in ospoll_add()
282 int new_size = ospoll->size ? ospoll->size * 2 : MAXCLIENTS * 2; in ospoll_add()
284 new_fds = reallocarray(ospoll->fds, new_size, sizeof (ospoll->fds[0])); in ospoll_add()
287 ospoll->fds = new_fds; in ospoll_add()
288 ospoll->size = new_size; in ospoll_add()
291 array_insert(ospoll->fds, ospoll->num, sizeof (ospoll->fds[0]), pos); in ospoll_add()
292 ospoll->num++; in ospoll_add()
294 ospoll->fds[pos].fd = fd; in ospoll_add()
295 ospoll->fds[pos].xevents = 0; in ospoll_add()
296 ospoll->fds[pos].revents = 0; in ospoll_add()
298 ospoll->fds[pos].trigger = trigger; in ospoll_add()
299 ospoll->fds[pos].callback = callback; in ospoll_add()
300 ospoll->fds[pos].data = data; in ospoll_add()
310 if (ospoll->num >= ospoll->size) { in ospoll_add()
312 int new_size = ospoll->size ? ospoll->size * 2 : MAXCLIENTS * 2; in ospoll_add()
314 new_fds = reallocarray(ospoll->fds, new_size, sizeof (ospoll->fds[0])); in ospoll_add()
319 ospoll->fds = new_fds; in ospoll_add()
320 ospoll->size = new_size; in ospoll_add()
327 array_insert(ospoll->fds, ospoll->num, sizeof (ospoll->fds[0]), pos); in ospoll_add()
328 ospoll->fds[pos] = osfd; in ospoll_add()
329 ospoll->num++; in ospoll_add()
331 osfd = ospoll->fds[pos]; in ospoll_add()
348 if (ospoll->num >= ospoll->size) { in ospoll_add()
350 int new_size = ospoll->size ? ospoll->size * 2 : MAXCLIENTS * 2; in ospoll_add()
352 new_fds = reallocarray(ospoll->fds, new_size, sizeof (ospoll->fds[0])); in ospoll_add()
357 ospoll->fds = new_fds; in ospoll_add()
358 ospoll->size = new_size; in ospoll_add()
365 if (epoll_ctl(ospoll->epoll_fd, EPOLL_CTL_ADD, fd, &ev) == -1) { in ospoll_add()
373 array_insert(ospoll->fds, ospoll->num, sizeof (ospoll->fds[0]), pos); in ospoll_add()
374 ospoll->fds[pos] = osfd; in ospoll_add()
375 ospoll->num++; in ospoll_add()
377 osfd = ospoll->fds[pos]; in ospoll_add()
385 if (ospoll->num == ospoll->size) { in ospoll_add()
388 int new_size = ospoll->size ? ospoll->size * 2 : MAXCLIENTS * 2; in ospoll_add()
390 new_fds = reallocarray(ospoll->fds, new_size, sizeof (ospoll->fds[0])); in ospoll_add()
393 ospoll->fds = new_fds; in ospoll_add()
394 new_osfds = reallocarray(ospoll->osfds, new_size, sizeof (ospoll->osfds[0])); in ospoll_add()
397 ospoll->osfds = new_osfds; in ospoll_add()
398 ospoll->size = new_size; in ospoll_add()
401 array_insert(ospoll->fds, ospoll->num, sizeof (ospoll->fds[0]), pos); in ospoll_add()
402 array_insert(ospoll->osfds, ospoll->num, sizeof (ospoll->osfds[0]), pos); in ospoll_add()
403 ospoll->num++; in ospoll_add()
404 ospoll->changed = TRUE; in ospoll_add()
406 ospoll->fds[pos].fd = fd; in ospoll_add()
407 ospoll->fds[pos].events = 0; in ospoll_add()
408 ospoll->fds[pos].revents = 0; in ospoll_add()
409 ospoll->osfds[pos].revents = 0; in ospoll_add()
411 ospoll->osfds[pos].trigger = trigger; in ospoll_add()
412 ospoll->osfds[pos].callback = callback; in ospoll_add()
413 ospoll->osfds[pos].data = data; in ospoll_add()
419 ospoll_remove(struct ospoll *ospoll, int fd) in ospoll_remove() argument
421 int pos = ospoll_find(ospoll, fd); in ospoll_remove()
423 pos = ospoll_find(ospoll, fd); in ospoll_remove()
426 struct ospollfd *osfd = &ospoll->fds[pos]; in ospoll_remove()
428 pollset_ctl(ospoll->ps, &ctl, 1); in ospoll_remove()
430 array_delete(ospoll->fds, ospoll->num, sizeof (ospoll->fds[0]), pos); in ospoll_remove()
431 ospoll->num--; in ospoll_remove()
434 struct ospollfd *osfd = ospoll->fds[pos]; in ospoll_remove()
435 port_dissociate(ospoll->epoll_fd, PORT_SOURCE_FD, fd); in ospoll_remove()
437 array_delete(ospoll->fds, ospoll->num, sizeof (ospoll->fds[0]), pos); in ospoll_remove()
438 ospoll->num--; in ospoll_remove()
441 xorg_list_add(&osfd->deleted, &ospoll->deleted); in ospoll_remove()
444 struct ospollfd *osfd = ospoll->fds[pos]; in ospoll_remove()
448 (void) epoll_ctl(ospoll->epoll_fd, EPOLL_CTL_DEL, fd, &ev); in ospoll_remove()
450 array_delete(ospoll->fds, ospoll->num, sizeof (ospoll->fds[0]), pos); in ospoll_remove()
451 ospoll->num--; in ospoll_remove()
454 xorg_list_add(&osfd->deleted, &ospoll->deleted); in ospoll_remove()
457 array_delete(ospoll->fds, ospoll->num, sizeof (ospoll->fds[0]), pos); in ospoll_remove()
458 array_delete(ospoll->osfds, ospoll->num, sizeof (ospoll->osfds[0]), pos); in ospoll_remove()
459 ospoll->num--; in ospoll_remove()
460 ospoll->changed = TRUE; in ospoll_remove()
467 epoll_mod(struct ospoll *ospoll, struct ospollfd *osfd) in epoll_mod() argument
474 port_associate(ospoll->epoll_fd, PORT_SOURCE_FD, osfd->fd, events, osfd); in epoll_mod()
480 epoll_mod(struct ospoll *ospoll, struct ospollfd *osfd) in epoll_mod() argument
491 (void) epoll_ctl(ospoll->epoll_fd, EPOLL_CTL_MOD, osfd->fd, &ev); in epoll_mod()
496 ospoll_listen(struct ospoll *ospoll, int fd, int xevents) in ospoll_listen() argument
498 int pos = ospoll_find(ospoll, fd); in ospoll_listen()
505 ospoll->fds[pos].revents &= ~POLLIN; in ospoll_listen()
509 ospoll->fds[pos].revents &= ~POLLOUT; in ospoll_listen()
511 pollset_ctl(ospoll->ps, &ctl, 1); in ospoll_listen()
512 ospoll->fds[pos].xevents |= xevents; in ospoll_listen()
515 struct ospollfd *osfd = ospoll->fds[pos]; in ospoll_listen()
517 epoll_mod(ospoll, osfd); in ospoll_listen()
521 ospoll->fds[pos].events |= POLLIN; in ospoll_listen()
522 ospoll->osfds[pos].revents &= ~POLLIN; in ospoll_listen()
525 ospoll->fds[pos].events |= POLLOUT; in ospoll_listen()
526 ospoll->osfds[pos].revents &= ~POLLOUT; in ospoll_listen()
533 ospoll_mute(struct ospoll *ospoll, int fd, int xevents) in ospoll_mute() argument
535 int pos = ospoll_find(ospoll, fd); in ospoll_mute()
539 struct ospollfd *osfd = &ospoll->fds[pos]; in ospoll_mute()
542 pollset_ctl(ospoll->ps, &ctl, 1); in ospoll_mute()
551 pollset_ctl(ospoll->ps, &ctl, 1); in ospoll_mute()
555 struct ospollfd *osfd = ospoll->fds[pos]; in ospoll_mute()
557 epoll_mod(ospoll, osfd); in ospoll_mute()
561 ospoll->fds[pos].events &= ~POLLIN; in ospoll_mute()
563 ospoll->fds[pos].events &= ~POLLOUT; in ospoll_mute()
570 ospoll_wait(struct ospoll *ospoll, int timeout) in ospoll_wait() argument
577 nready = pollset_poll(ospoll->ps, events, MAX_EVENTS, timeout); in ospoll_wait()
580 int pos = ospoll_find(ospoll, ev->fd); in ospoll_wait()
581 struct ospollfd *osfd = &ospoll->fds[pos]; in ospoll_wait()
610 if (port_getn(ospoll->epoll_fd, events, MAX_EVENTS, &nget, &port_timeout) in ospoll_wait()
632 epoll_mod(ospoll, osfd); in ospoll_wait()
635 ospoll_clean_deleted(ospoll); in ospoll_wait()
642 nready = epoll_wait(ospoll->epoll_fd, events, MAX_EVENTS, timeout); in ospoll_wait()
659 ospoll_clean_deleted(ospoll); in ospoll_wait()
662 nready = xserver_poll(ospoll->fds, ospoll->num, timeout); in ospoll_wait()
663 ospoll->changed = FALSE; in ospoll_wait()
666 for (f = 0; f < ospoll->num; f++) { in ospoll_wait()
667 short revents = ospoll->fds[f].revents; in ospoll_wait()
668 short oldevents = ospoll->osfds[f].revents; in ospoll_wait()
670 ospoll->osfds[f].revents = (revents & (POLLIN|POLLOUT)); in ospoll_wait()
671 if (ospoll->osfds[f].trigger == ospoll_trigger_edge) in ospoll_wait()
681 ospoll->osfds[f].callback(ospoll->fds[f].fd, xevents, in ospoll_wait()
682 ospoll->osfds[f].data); in ospoll_wait()
687 if (ospoll->changed) in ospoll_wait()
697 ospoll_reset_events(struct ospoll *ospoll, int fd) in ospoll_reset_events() argument
700 int pos = ospoll_find(ospoll, fd); in ospoll_reset_events()
705 ospoll->fds[pos].revents = 0; in ospoll_reset_events()
708 int pos = ospoll_find(ospoll, fd); in ospoll_reset_events()
713 epoll_mod(ospoll, ospoll->fds[pos]); in ospoll_reset_events()
716 int pos = ospoll_find(ospoll, fd); in ospoll_reset_events()
721 ospoll->osfds[pos].revents = 0; in ospoll_reset_events()
726 ospoll_data(struct ospoll *ospoll, int fd) in ospoll_data() argument
728 int pos = ospoll_find(ospoll, fd); in ospoll_data()
733 return ospoll->fds[pos].data; in ospoll_data()
736 return ospoll->fds[pos]->data; in ospoll_data()
739 return ospoll->osfds[pos].data; in ospoll_data()