Example #1
0
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);
    }
  }
}
Example #2
0
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);
}