diff --git a/src/async.c b/src/async.c index 83cafbb..2f1c2a8 100644 --- a/src/async.c +++ b/src/async.c @@ -256,7 +256,7 @@ void async_thread(void) { min_ts = -1000, cur_ts = clock_micros(); for (int i = 0; i < list_size(local); i++) { evt_listen_t *evt = local[i]; - if (!evt->socket) continue; + if (!evt->socket || evt->socket->timeout_us < 0) continue; ts = evt->socket->ts_last + evt->socket->timeout_us - cur_ts; if (min_ts == -1000 || ts < min_ts) min_ts = ts; @@ -307,7 +307,7 @@ void async_thread(void) { evt_listen_t *evt = local[i]; if (!evt->socket) continue; - if ((cur_ts - evt->socket->ts_last) >= evt->socket->timeout_us) { + if (evt->socket->timeout_us >= 0 && (cur_ts - evt->socket->ts_last) >= evt->socket->timeout_us) { evt->to_cb(evt->arg); if (epoll_ctl(epoll_fd, EPOLL_CTL_DEL, evt->fd, NULL) == -1) { diff --git a/src/lib/fastcgi.c b/src/lib/fastcgi.c index d38def3..de8e935 100644 --- a/src/lib/fastcgi.c +++ b/src/lib/fastcgi.c @@ -195,6 +195,7 @@ int fastcgi_init(fastcgi_cnx_t *conn, int mode, unsigned int req_num, const sock conn->fd_out = pipes[1][1]; conn->out.socket = pipes[1][0]; + sock_set_timeout(&conn->out, FASTCGI_TIMEOUT); conn->fd_err = pipes[0][1]; conn->err = fdopen(pipes[0][0], "r"); diff --git a/src/worker/fastcgi_handler.c b/src/worker/fastcgi_handler.c index 464bad8..64abd37 100644 --- a/src/worker/fastcgi_handler.c +++ b/src/worker/fastcgi_handler.c @@ -162,6 +162,7 @@ static void fastcgi_error_cb(chunk_ctx_t *ctx) { logger_set_prefix("[%s%*s%s]%s", BLD_STR, ADDRSTRLEN, ctx->client->req_host, CLR_STR, ctx->client->log_prefix); + // FIXME segfault on error_cb warning("Closing connection due to FastCGI error"); if(ctx->client->fcgi_ctx) { fastcgi_close(ctx->client->fcgi_ctx);