> Нужен пример того как раздаются запросы, чтобы понять что там происходит.
Каждый поток проходит FCGX_Accept_r сомостоятельно, примерный код:
while (true){
static pthread_mutex_t accept_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock(&accept_mutex);
FCGX_Request* rq = new FCGX_Request;
FCGX_InitRequest(rq, f_socket, 0);
FCGX_Accept_r(rq);
pthread_mutex_unlock(&accept_mutex);
/* ... здесь обработка запроса ... */
FCGX_Finish_r(rq);
delete rq;
}
Метод соответствует примеру threaded.c из поставки libfcgi. По идее она должна быть на это расчитана.
Вообще я сначала подумал, что libfcgi не принимает новый запрос до того, как обработается (FCGX_Finish_r), а потом догадался останавливать обрабатывающий поток совсем ( т.е. обработка запроcа не будет завершена никогда)