Lines Matching refs:eh
60 iu_eh_t *eh = malloc(sizeof (iu_eh_t)); in iu_eh_create() local
63 if (eh == NULL) in iu_eh_create()
66 eh->iueh_pollfds = NULL; in iu_eh_create()
67 eh->iueh_events = NULL; in iu_eh_create()
68 eh->iueh_shutdown = NULL; in iu_eh_create()
69 eh->iueh_num_fds = 0; in iu_eh_create()
70 eh->iueh_stop = B_FALSE; in iu_eh_create()
71 eh->iueh_reason = 0; in iu_eh_create()
72 eh->iueh_shutdown_arg = NULL; in iu_eh_create()
74 (void) sigemptyset(&eh->iueh_sig_regset); in iu_eh_create()
76 eh->iueh_sig_info[sig].iues_pending = B_FALSE; in iu_eh_create()
77 eh->iueh_sig_info[sig].iues_handler = NULL; in iu_eh_create()
78 eh->iueh_sig_info[sig].iues_data = NULL; in iu_eh_create()
81 return (eh); in iu_eh_create()
94 iu_eh_destroy(iu_eh_t *eh) in iu_eh_destroy() argument
99 if (signal_to_eh[sig] == eh) in iu_eh_destroy()
100 (void) iu_eh_unregister_signal(eh, sig, NULL); in iu_eh_destroy()
102 free(eh->iueh_pollfds); in iu_eh_destroy()
103 free(eh->iueh_events); in iu_eh_destroy()
104 free(eh); in iu_eh_destroy()
122 iu_stop_handling_events(iu_eh_t *eh, unsigned int reason, in iu_stop_handling_events() argument
125 eh->iueh_stop = B_TRUE; in iu_stop_handling_events()
126 eh->iueh_reason = reason; in iu_stop_handling_events()
127 eh->iueh_shutdown = shutdown; in iu_stop_handling_events()
128 eh->iueh_shutdown_arg = arg; in iu_stop_handling_events()
141 grow_fds(iu_eh_t *eh, int total_fds) in grow_fds() argument
147 if (total_fds <= eh->iueh_num_fds) in grow_fds()
150 new_pollfds = realloc(eh->iueh_pollfds, in grow_fds()
155 eh->iueh_pollfds = new_pollfds; in grow_fds()
157 new_events = realloc(eh->iueh_events, in grow_fds()
172 for (i = eh->iueh_num_fds; i < total_fds; i++) in grow_fds()
173 eh->iueh_pollfds[i].fd = -1; in grow_fds()
175 eh->iueh_events = new_events; in grow_fds()
176 eh->iueh_num_fds = total_fds; in grow_fds()
199 iu_register_event(iu_eh_t *eh, int fd, short events, iu_eh_callback_t *callback, in iu_register_event() argument
202 if (eh->iueh_num_fds <= fd) in iu_register_event()
203 if (grow_fds(eh, fd + EH_FD_SLACK) == 0) in iu_register_event()
218 if (eh->iueh_pollfds[fd].fd != -1) in iu_register_event()
221 eh->iueh_pollfds[fd].fd = fd; in iu_register_event()
222 eh->iueh_pollfds[fd].events = events; in iu_register_event()
223 eh->iueh_events[fd].iuen_callback = callback; in iu_register_event()
224 eh->iueh_events[fd].iuen_arg = arg; in iu_register_event()
241 iu_unregister_event(iu_eh_t *eh, iu_event_id_t event_id, void **arg) in iu_unregister_event() argument
243 if (event_id < 0 || event_id >= eh->iueh_num_fds || in iu_unregister_event()
244 eh->iueh_pollfds[event_id].fd == -1) in iu_unregister_event()
254 eh->iueh_pollfds[event_id].revents = 0; in iu_unregister_event()
255 eh->iueh_pollfds[event_id].fd = -1; in iu_unregister_event()
257 *arg = eh->iueh_events[event_id].iuen_arg; in iu_unregister_event()
272 iu_handle_events(iu_eh_t *eh, iu_tq_t *tq) in iu_handle_events() argument
278 eh->iueh_stop = B_FALSE; in iu_handle_events()
288 (void) sigprocmask(SIG_UNBLOCK, &eh->iueh_sig_regset, &oset); in iu_handle_events()
289 n_lit = poll(eh->iueh_pollfds, eh->iueh_num_fds, timeout); in iu_handle_events()
300 if (eh->iueh_sig_info[sig].iues_pending) { in iu_handle_events()
301 eh->iueh_sig_info[sig].iues_pending = in iu_handle_events()
303 eh->iueh_sig_info[sig].iues_handler(eh, in iu_handle_events()
305 eh->iueh_sig_info[sig].iues_data); in iu_handle_events()
309 if (eh->iueh_shutdown != NULL) in iu_handle_events()
329 for (i = 0; i < eh->iueh_num_fds && n_lit > 0; i++) { in iu_handle_events()
331 if (eh->iueh_pollfds[i].revents == 0) in iu_handle_events()
341 if (eh->iueh_pollfds[i].revents & (POLLNVAL|POLLERR)) { in iu_handle_events()
343 (void) iu_unregister_event(eh, i, NULL); in iu_handle_events()
347 eh->iueh_events[i].iuen_callback(eh, i, in iu_handle_events()
348 eh->iueh_pollfds[i].revents, i, in iu_handle_events()
349 eh->iueh_events[i].iuen_arg); in iu_handle_events()
352 } while (eh->iueh_stop == B_FALSE || (eh->iueh_shutdown != NULL && in iu_handle_events()
353 eh->iueh_shutdown(eh, eh->iueh_shutdown_arg) == B_FALSE)); in iu_handle_events()
355 return (eh->iueh_reason); in iu_handle_events()
383 iu_eh_register_signal(iu_eh_t *eh, int sig, iu_eh_sighandler_t *handler, in iu_eh_register_signal() argument
401 eh->iueh_sig_info[sig].iues_data = data; in iu_eh_register_signal()
402 eh->iueh_sig_info[sig].iues_handler = handler; in iu_eh_register_signal()
403 signal_to_eh[sig] = eh; in iu_eh_register_signal()
405 (void) sigaddset(&eh->iueh_sig_regset, sig); in iu_eh_register_signal()
420 iu_eh_unregister_signal(iu_eh_t *eh, int sig, void **datap) in iu_eh_unregister_signal() argument
424 if (sig < 0 || sig >= NSIG || signal_to_eh[sig] != eh) in iu_eh_unregister_signal()
431 *datap = eh->iueh_sig_info[sig].iues_data; in iu_eh_unregister_signal()
437 eh->iueh_sig_info[sig].iues_data = NULL; in iu_eh_unregister_signal()
438 eh->iueh_sig_info[sig].iues_handler = NULL; in iu_eh_unregister_signal()
439 eh->iueh_sig_info[sig].iues_pending = B_FALSE; in iu_eh_unregister_signal()
442 (void) sigdelset(&eh->iueh_sig_regset, sig); in iu_eh_unregister_signal()