]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: compression: always create the compression pool
authorWilly Tarreau <w@1wt.eu>
Mon, 26 Nov 2018 13:44:03 +0000 (14:44 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 26 Nov 2018 13:46:55 +0000 (14:46 +0100)
Surprisingly, the compression pool was created at runtime on first use,
which is not very convenient, has performance and reliability impacts,
and even makes monitoring less easy. Let's move the pool creation at
startup time instead. This even removes the need for the spinlock in
case USE_ZLIB is not defined.

src/compression.c

index 3c0cea5716f94b7c849a2100a9c554fb9bff5e5f..d3e6f28169d02fff62d9964780707e3ce27f7a65 100644 (file)
@@ -40,7 +40,7 @@
 #include <proto/stream.h>
 
 
-#if defined(USE_SLZ) || defined(USE_ZLIB)
+#if defined(USE_ZLIB)
 __decl_hathreads(static HA_SPINLOCK_T comp_pool_lock);
 #endif
 
@@ -158,13 +158,6 @@ static inline int init_comp_ctx(struct comp_ctx **comp_ctx)
                return -1;
 #endif
 
-       if (unlikely(pool_comp_ctx == NULL)) {
-               HA_SPIN_LOCK(COMP_POOL_LOCK, &comp_pool_lock);
-               if (unlikely(pool_comp_ctx == NULL))
-                       pool_comp_ctx = create_pool("comp_ctx", sizeof(struct comp_ctx), MEM_F_SHARED);
-               HA_SPIN_UNLOCK(COMP_POOL_LOCK, &comp_pool_lock);
-       }
-
        *comp_ctx = pool_alloc(pool_comp_ctx);
        if (*comp_ctx == NULL)
                return -1;
@@ -716,6 +709,11 @@ static void __comp_fetch_init(void)
        slz_make_crc_table();
        slz_prepare_dist_table();
 #endif
+
+#if defined(USE_ZLIB) || defined(USE_SLZ)
+       pool_comp_ctx = create_pool("comp_ctx", sizeof(struct comp_ctx), MEM_F_SHARED);
+#endif
+
 #if defined(USE_ZLIB) && defined(DEFAULT_MAXZLIBMEM)
        global.maxzlibmem = DEFAULT_MAXZLIBMEM * 1024U * 1024U;
 #endif