int uloop_fd_delete(struct uloop_fd *fd)
{
+ int ret;
int i;
for (i = 0; i < cur_nfds; i++) {
uloop_fd_set_cb(fd, 0);
fd->registered = false;
- fd->flags = 0;
uloop_fd_stack_event(fd, -1);
- return __uloop_fd_delete(fd);
+ ret = __uloop_fd_delete(fd);
+ fd->flags = 0;
+
+ return ret;
}
static int64_t tv_diff(struct timeval *t1, struct timeval *t2)
{
uint8_t sigbyte = signo;
- if (signo == ECHILD)
+ if (signo == SIGCHLD)
do_sigchld = true;
do {
if (s->orig.sa_handler != uloop_signal_wake) {
sa.sa_handler = uloop_signal_wake;
sa.sa_flags = 0;
+ sigemptyset(&sa.sa_mask);
sigaction(s->signo, &sa, NULL);
}