From c59977dada2aedfa6433e527a1526a78f170e545 Mon Sep 17 00:00:00 2001
From: Lorenz Stechauner <lorenz.stechauner@necronda.net>
Date: Thu, 6 Jul 2023 00:29:12 +0200
Subject: [PATCH] Fix proxy unlocking

---
 src/lib/proxy.c               | 3 +--
 src/worker/ws_frame_handler.c | 1 +
 2 files changed, 2 insertions(+), 2 deletions(-)

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);