static void do_group_signal_fds() { int i; for (i = 0; i < signal_fd_count; i++) { if (signal_fds[i].refcount) { rktio_signal_received_at(signal_fds[i].signal_fd); } } }
static void add_child_status(int pid, int status) { Child_Status *st; /* Search for existing record, which will have a signal_fd: */ pthread_mutex_lock(&child_status_lock); for (st = child_statuses; st; st = st->next) { if (st->pid == pid) break; } if (!st) { /* must have terminated before it was registered (and since we detected it, it must not be in a group) */ st = malloc(sizeof(Child_Status)); st->pid = pid; st->signal_fd = NULL; st->next = child_statuses; child_statuses = st; st->next_unused = NULL; st->unneeded = 0; st->in_group = 0; } st->status = status; st->done = 1; if (st->signal_fd && st->in_group) remove_group_signal_fd(st->signal_fd); if (st->signal_fd) rktio_signal_received_at(st->signal_fd); if (st->unneeded) (void)raw_get_child_status(st->pid, NULL, 1, 1, 1); pthread_mutex_unlock(&child_status_lock); }