static int reclaim_one_pid()

in modules/fcgid/fcgid_pm_main.c [370:406]


static int reclaim_one_pid(server_rec *main_server, fcgid_procnode *proc,
                           action_t action)
{
    int exitcode;
    apr_exit_why_e exitwhy;
    apr_wait_how_e wait_how = action == HARD_WAIT ? APR_WAIT : APR_NOWAIT;

    if (apr_proc_wait(&proc->proc_id, &exitcode, &exitwhy,
                      wait_how) != APR_CHILD_NOTDONE) {
        proc->diewhy = FCGID_DIE_SHUTDOWN;
        proc_print_exit_info(proc, exitcode, exitwhy,
                             main_server);
        proc->proc_pool = NULL;
        return 1;
    }

    switch(action) {
    case DO_NOTHING:
    case HARD_WAIT:
        break;

    case KILL_GRACEFULLY:
        proc_kill_gracefully(proc, main_server);
        break;

    case KILL_FORCEFULLY:
        ap_log_error(APLOG_MARK, APLOG_ERR, 0, main_server,
                     "FastCGI process %" APR_PID_T_FMT
                     " still did not exit, "
                     "terminating forcefully",
                     proc->proc_id.pid);
        proc_kill_force(proc, main_server);
        break;
    }

    return 0;
}