| 527 | } |
| 528 | |
| 529 | static void accept_mutex_error(const char *func, apr_status_t rv, int process_slot) |
| 530 | { |
| 531 | int level = APLOG_EMERG; |
| 532 | |
| 533 | if (ap_scoreboard_image->parent[process_slot].generation != |
| 534 | ap_scoreboard_image->global->running_generation) { |
| 535 | level = APLOG_DEBUG; /* common to get these at restart time */ |
| 536 | } |
| 537 | else if (requests_this_child == INT_MAX |
| 538 | || ((requests_this_child == ap_max_requests_per_child) |
| 539 | && ap_max_requests_per_child)) { |
| 540 | ap_log_error(APLOG_MARK, level, rv, ap_server_conf, APLOGNO(00272) |
| 541 | "apr_proc_mutex_%s failed " |
| 542 | "before this child process served any requests.", |
| 543 | func); |
| 544 | clean_child_exit(APEXIT_CHILDSICK); |
| 545 | } |
| 546 | ap_log_error(APLOG_MARK, level, rv, ap_server_conf, APLOGNO(00273) |
| 547 | "apr_proc_mutex_%s failed. Attempting to " |
| 548 | "shutdown process gracefully.", func); |
| 549 | signal_threads(ST_GRACEFUL); |
| 550 | } |
| 551 | |
| 552 | static void * APR_THREAD_FUNC listener_thread(apr_thread_t *thd, void * dummy) |
| 553 | { |
no test coverage detected