待つわけじゃないの?

cache_sz = connection_pool_size < ThreadsPerChild とすると、
なきゃぁないで、ae->sd = JK_INVALID_SOCKETになってエラーとちゃうんか?
セマフォ使って、空きがなきゃ待つとかって作りでも無いっぽいし。

static void ajp_next_connection(ajp_endpoint_t *ae, jk_logger_t *l)
{
    int rc;
    ajp_worker_t *aw = ae->worker;
    jk_sock_t sock = ae->sd;

    /* Mark existing endpoint socket as closed */
    ae->sd = JK_INVALID_SOCKET;
    JK_ENTER_CS(&aw->cs, rc);
    if (rc) {
        unsigned int i;
        for (i = 0; i < aw->ep_cache_sz; i++) {
            /* Find cache slot with usable socket */
            if (aw->ep_cache[i] && IS_VALID_SOCKET(aw->ep_cache[i]->sd)) {
                ae->sd = aw->ep_cache[i]->sd;
                aw->ep_cache[i]->sd = JK_INVALID_SOCKET;
                break;
            }
        }
        JK_LEAVE_CS(&aw->cs, rc);
    }
    /* Close previous socket */
    if (IS_VALID_SOCKET(sock))
        jk_close_socket(sock);
}