static void process_siglist() { mtev_skiplist_node *iter = NULL; struct proc_state *ps; pid_t pid; while(1) { int status = 0; pid = waitpid(0, &status, WNOHANG); if(pid <= 0) break; ps = mtev_skiplist_find_compare(&active_procs, &pid, &iter, __proc_state_pid); mtevL((ps?nldeb:nlerr), "reaped pid %d (check: %lld) -> %x\n", pid, (long long int)(ps?ps->check_no:-1), status); if(ps) { int rv = mtev_skiplist_remove_compare(&active_procs, &ps->pid, NULL, __proc_state_pid); if (!rv) { mtevL(noit_error, "error: couldn't remove PID %d from active_procs in external\n", ps->pid); } mtev_skiplist_insert(&done_procs, ps); } } }
int mtev_skiplist_remove(mtev_skiplist *sl, const void *data, mtev_freefunc_t myfree) { if(!sl->compare) return 0; return mtev_skiplist_remove_compare(sl, data, myfree, sl->comparek); }