static int centralized_register_child(int pid, int in_group, rktio_signal_handle_t *signal_fd, int *status) { int found = 0; pthread_mutex_lock(&child_status_lock); /* The child may have terminated already: */ found = raw_get_child_status(pid, status, 0, 0, 0); if (!found) { /* Create a record for the child: */ Child_Status *st; st = malloc(sizeof(Child_Status)); st->pid = pid; st->signal_fd = signal_fd; st->status = 0; st->unneeded = 0; st->done = 0; st->in_group = in_group; st->next = child_statuses; child_statuses = st; st->next_unused = NULL; if (in_group) add_group_signal_fd(signal_fd); } pthread_mutex_unlock(&child_status_lock); return found; }
int scheme_places_register_child(int pid, int is_group, void *signal_fd, int *status) { int found = 0; mzrt_mutex_lock(child_status_lock); /* The child may have terminated already: */ found = raw_get_child_status(pid, status, 0, 0, 0); if (!found) { /* Create a record for the child: */ Child_Status *st; st = malloc(sizeof(Child_Status)); st->pid = pid; st->signal_fd = signal_fd; st->status = 0; st->unneeded = 0; st->done = 0; st->is_group = is_group; st->next = child_statuses; child_statuses = st; st->next_unused = NULL; if (is_group) add_group_signal_fd(signal_fd); } mzrt_mutex_unlock(child_status_lock); return found; }