static int poll_fd = -1;
bool uloop_cancelled = false;
-bool uloop_handle_sigchld = true;
static bool do_sigchld = false;
static struct uloop_fd_event cur_fds[ULOOP_MAX_EVENTS];
if (events[n].flags & EV_ERROR) {
u->error = true;
- uloop_fd_delete(u);
+ if (!(u->flags & ULOOP_ERROR_CB))
+ uloop_fd_delete(u);
}
if(events[n].filter == EVFILT_READ)
if (events[n].events & (EPOLLERR|EPOLLHUP)) {
u->error = true;
- uloop_fd_delete(u);
+ if (!(u->flags & ULOOP_ERROR_CB))
+ uloop_fd_delete(u);
}
if(!(events[n].events & (EPOLLRDHUP|EPOLLIN|EPOLLOUT|EPOLLERR|EPOLLHUP))) {
sock->registered = true;
sock->eof = false;
+ sock->error = false;
out:
return ret;
sigaction(SIGINT, &s, &old_sigint);
- if (!uloop_handle_sigchld)
- return;
-
if (add)
s.sa_handler = uloop_sigchld;
else
if (!recursive_calls++)
uloop_setup_signals(true);
+ uloop_cancelled = false;
while(!uloop_cancelled)
{
uloop_gettime(&tv);