diff --git a/src/lib/proxy.c b/src/lib/proxy.c index 6d480b8..1d052ec 100644 --- a/src/lib/proxy.c +++ b/src/lib/proxy.c @@ -139,10 +139,9 @@ proxy_ctx_t *proxy_get_by_conf(host_config_t *conf) { void proxy_unlock_ctx(proxy_ctx_t *ctx) { int n = (int) ((ctx - proxies) / MAX_PROXY_CNX_PER_HOST); - int was_in_use = ctx->in_use; ctx->in_use = 0; ctx->client = NULL; - if (was_in_use) sem_post(&available[n]); + sem_post(&available[n]); } int proxy_request_header(http_req *req, sock *sock) { diff --git a/src/worker/ws_frame_handler.c b/src/worker/ws_frame_handler.c index 7b815bb..8b24b1d 100644 --- a/src/worker/ws_frame_handler.c +++ b/src/worker/ws_frame_handler.c @@ -88,6 +88,7 @@ void ws_close(ws_ctx_t *ctx) { logger_set_prefix("[%*s]%s", ADDRSTRLEN, ctx->client->socket.s_addr, ctx->client->log_prefix); info("Closing WebSocket connection"); proxy_close(ctx->client->proxy); + proxy_unlock_ctx(ctx->client->proxy); tcp_close(ctx->client); } free(ctx);