/* destroy an fd_event */ static int poll_event_fd_destructor(struct tevent_fd *fde) { struct tevent_context *ev = fde->event_ctx; struct poll_event_context *poll_ev; uint64_t del_idx = fde->additional_flags; if (ev == NULL) { goto done; } poll_ev = talloc_get_type_abort( ev->additional_data, struct poll_event_context); if (del_idx == UINT64_MAX) { struct tevent_fd **listp = (struct tevent_fd **)fde->additional_data; DLIST_REMOVE((*listp), fde); goto done; } poll_ev->fdes[del_idx] = NULL; poll_ev->deleted = true; poll_event_wake_pollthread(poll_ev); done: return tevent_common_fd_destructor(fde); }
/* destroy an fd_event */ static int epoll_event_fd_destructor(struct tevent_fd *fde) { struct tevent_context *ev = fde->event_ctx; struct epoll_event_context *epoll_ev = NULL; if (ev) { epoll_ev = talloc_get_type(ev->additional_data, struct epoll_event_context); epoll_check_reopen(epoll_ev); epoll_del_event(epoll_ev, fde); } return tevent_common_fd_destructor(fde); }
/* destroy an fd_event */ static int std_event_fd_destructor(struct tevent_fd *fde) { struct tevent_context *ev = fde->event_ctx; struct std_event_context *std_ev = NULL; if (ev) { std_ev = talloc_get_type(ev->additional_data, struct std_event_context); epoll_check_reopen(std_ev); if (std_ev->maxfd == fde->fd) { std_ev->maxfd = EVENT_INVALID_MAXFD; } epoll_del_event(std_ev, fde); } return tevent_common_fd_destructor(fde); }