Lines Matching refs:eh

58 	iu_eh_t	*eh = malloc(sizeof (iu_eh_t));  in iu_eh_create()  local
61 if (eh == NULL) in iu_eh_create()
64 eh->iueh_pollfds = NULL; in iu_eh_create()
65 eh->iueh_events = NULL; in iu_eh_create()
66 eh->iueh_shutdown = NULL; in iu_eh_create()
67 eh->iueh_num_fds = 0; in iu_eh_create()
68 eh->iueh_stop = B_FALSE; in iu_eh_create()
69 eh->iueh_reason = 0; in iu_eh_create()
70 eh->iueh_shutdown_arg = NULL; in iu_eh_create()
72 (void) sigemptyset(&eh->iueh_sig_regset); in iu_eh_create()
74 eh->iueh_sig_info[sig].iues_pending = B_FALSE; in iu_eh_create()
75 eh->iueh_sig_info[sig].iues_handler = NULL; in iu_eh_create()
76 eh->iueh_sig_info[sig].iues_data = NULL; in iu_eh_create()
79 return (eh); in iu_eh_create()
92 iu_eh_destroy(iu_eh_t *eh) in iu_eh_destroy() argument
97 if (signal_to_eh[sig] == eh) in iu_eh_destroy()
98 (void) iu_eh_unregister_signal(eh, sig, NULL); in iu_eh_destroy()
100 free(eh->iueh_pollfds); in iu_eh_destroy()
101 free(eh->iueh_events); in iu_eh_destroy()
102 free(eh); in iu_eh_destroy()
120 iu_stop_handling_events(iu_eh_t *eh, unsigned int reason, in iu_stop_handling_events() argument
123 eh->iueh_stop = B_TRUE; in iu_stop_handling_events()
124 eh->iueh_reason = reason; in iu_stop_handling_events()
125 eh->iueh_shutdown = shutdown; in iu_stop_handling_events()
126 eh->iueh_shutdown_arg = arg; in iu_stop_handling_events()
139 grow_fds(iu_eh_t *eh, int total_fds) in grow_fds() argument
145 if (total_fds <= eh->iueh_num_fds) in grow_fds()
148 new_pollfds = realloc(eh->iueh_pollfds, in grow_fds()
153 eh->iueh_pollfds = new_pollfds; in grow_fds()
155 new_events = realloc(eh->iueh_events, in grow_fds()
170 for (i = eh->iueh_num_fds; i < total_fds; i++) in grow_fds()
171 eh->iueh_pollfds[i].fd = -1; in grow_fds()
173 eh->iueh_events = new_events; in grow_fds()
174 eh->iueh_num_fds = total_fds; in grow_fds()
197 iu_register_event(iu_eh_t *eh, int fd, short events, iu_eh_callback_t *callback, in iu_register_event() argument
200 if (eh->iueh_num_fds <= fd) in iu_register_event()
201 if (grow_fds(eh, fd + EH_FD_SLACK) == 0) in iu_register_event()
216 if (eh->iueh_pollfds[fd].fd != -1) in iu_register_event()
219 eh->iueh_pollfds[fd].fd = fd; in iu_register_event()
220 eh->iueh_pollfds[fd].events = events; in iu_register_event()
221 eh->iueh_events[fd].iuen_callback = callback; in iu_register_event()
222 eh->iueh_events[fd].iuen_arg = arg; in iu_register_event()
239 iu_unregister_event(iu_eh_t *eh, iu_event_id_t event_id, void **arg) in iu_unregister_event() argument
241 if (event_id < 0 || event_id >= eh->iueh_num_fds || in iu_unregister_event()
242 eh->iueh_pollfds[event_id].fd == -1) in iu_unregister_event()
252 eh->iueh_pollfds[event_id].revents = 0; in iu_unregister_event()
253 eh->iueh_pollfds[event_id].fd = -1; in iu_unregister_event()
255 *arg = eh->iueh_events[event_id].iuen_arg; in iu_unregister_event()
270 iu_handle_events(iu_eh_t *eh, iu_tq_t *tq) in iu_handle_events() argument
276 eh->iueh_stop = B_FALSE; in iu_handle_events()
286 (void) sigprocmask(SIG_UNBLOCK, &eh->iueh_sig_regset, &oset); in iu_handle_events()
287 n_lit = poll(eh->iueh_pollfds, eh->iueh_num_fds, timeout); in iu_handle_events()
298 if (eh->iueh_sig_info[sig].iues_pending) { in iu_handle_events()
299 eh->iueh_sig_info[sig].iues_pending = in iu_handle_events()
301 eh->iueh_sig_info[sig].iues_handler(eh, in iu_handle_events()
303 eh->iueh_sig_info[sig].iues_data); in iu_handle_events()
307 if (eh->iueh_shutdown != NULL) in iu_handle_events()
327 for (i = 0; i < eh->iueh_num_fds && n_lit > 0; i++) { in iu_handle_events()
329 if (eh->iueh_pollfds[i].revents == 0) in iu_handle_events()
339 if (eh->iueh_pollfds[i].revents & (POLLNVAL|POLLERR)) { in iu_handle_events()
341 (void) iu_unregister_event(eh, i, NULL); in iu_handle_events()
345 eh->iueh_events[i].iuen_callback(eh, i, in iu_handle_events()
346 eh->iueh_pollfds[i].revents, i, in iu_handle_events()
347 eh->iueh_events[i].iuen_arg); in iu_handle_events()
350 } while (eh->iueh_stop == B_FALSE || (eh->iueh_shutdown != NULL && in iu_handle_events()
351 eh->iueh_shutdown(eh, eh->iueh_shutdown_arg) == B_FALSE)); in iu_handle_events()
353 return (eh->iueh_reason); in iu_handle_events()
381 iu_eh_register_signal(iu_eh_t *eh, int sig, iu_eh_sighandler_t *handler, in iu_eh_register_signal() argument
399 eh->iueh_sig_info[sig].iues_data = data; in iu_eh_register_signal()
400 eh->iueh_sig_info[sig].iues_handler = handler; in iu_eh_register_signal()
401 signal_to_eh[sig] = eh; in iu_eh_register_signal()
403 (void) sigaddset(&eh->iueh_sig_regset, sig); in iu_eh_register_signal()
418 iu_eh_unregister_signal(iu_eh_t *eh, int sig, void **datap) in iu_eh_unregister_signal() argument
422 if (sig < 0 || sig >= NSIG || signal_to_eh[sig] != eh) in iu_eh_unregister_signal()
429 *datap = eh->iueh_sig_info[sig].iues_data; in iu_eh_unregister_signal()
435 eh->iueh_sig_info[sig].iues_data = NULL; in iu_eh_unregister_signal()
436 eh->iueh_sig_info[sig].iues_handler = NULL; in iu_eh_unregister_signal()
437 eh->iueh_sig_info[sig].iues_pending = B_FALSE; in iu_eh_unregister_signal()
440 (void) sigdelset(&eh->iueh_sig_regset, sig); in iu_eh_unregister_signal()