void fpm_scoreboard_child_use(struct fpm_scoreboard_s *scoreboard, int child_index, pid_t pid) /* {{{ */ { struct fpm_scoreboard_proc_s *proc; fpm_scoreboard = scoreboard; fpm_scoreboard_i = child_index; proc = fpm_scoreboard_proc_get(scoreboard, child_index); if (!proc) { return; } proc->pid = pid; proc->start_epoch = time(NULL); }
int fpm_request_is_idle(struct fpm_child_s *child) /* {{{ */ { struct fpm_scoreboard_proc_s *proc; /* no need in atomicity here */ proc = fpm_scoreboard_proc_get(child->wp->scoreboard, child->scoreboard_i); if (!proc) { return 0; } return proc->request_stage == FPM_REQUEST_ACCEPTING; }
struct fpm_scoreboard_proc_s *fpm_scoreboard_proc_acquire(struct fpm_scoreboard_s *scoreboard, int child_index, int nohang) /* {{{ */ { struct fpm_scoreboard_proc_s *proc; proc = fpm_scoreboard_proc_get(scoreboard, child_index); if (!proc) { return NULL; } if (!fpm_spinlock(&proc->lock, nohang)) { return NULL; } return proc; }
int fpm_request_last_activity(struct fpm_child_s *child, struct timeval *tv) /* {{{ */ { struct fpm_scoreboard_proc_s *proc; if (!tv) return -1; proc = fpm_scoreboard_proc_get(child->wp->scoreboard, child->scoreboard_i); if (!proc) { return -1; } *tv = proc->tv; return 1; }