From 532ebee38e83b0b406e91af88262432012d943f4 Mon Sep 17 00:00:00 2001 From: Aurelien DARRAGON Date: Wed, 25 Jan 2023 16:35:00 +0100 Subject: [PATCH] DEV: hpack: fix `trash` build regression Since 7d84439 ("BUILD: hpack: include global.h for the trash that is needed in debug mode"), hpack decode tool fails to compile on targets that enable USE_THREAD. (ie: linux-glibc target as reported by Christian Ruppert) When building hpack devtool, we are including src/hpack-dec.c as a dependency. src/hpack-dec.c relies on the global trash whe debug mode is enabled. But as we're building hpack tool with a limited scope of haproxy sources, global trash (which is declared in src/chunk.c) is not available. Thus, src/hpack-dec.c relies on a local 'trash' variable declared within dev/hpack/decode.c This used to work fine until 7d84439. But now that global.h is explicitely included in src/hpack-dec.c, trash variable definition from decode.c conflicts with the one from global.h: In file included from include/../src/hpack-dec.c:35, from dev/hpack/decode.c:87: include/haproxy/global.h:52:35: error: thread-local declaration of 'trash' follows non-thread-local declaration 52 | extern THREAD_LOCAL struct buffer trash; Adding THREAD_LOCAL attribute to 'decode.c' local trash variable definition makes the compiler happy again. This should fix GH issue #2009 and should be backported to 2.7. --- dev/hpack/decode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/hpack/decode.c b/dev/hpack/decode.c index ae825120f7..13c95c77a1 100644 --- a/dev/hpack/decode.c +++ b/dev/hpack/decode.c @@ -30,7 +30,7 @@ uint8_t buf[MAX_RQ_SIZE]; char trash_buf[MAX_RQ_SIZE]; char tmp_buf[MAX_RQ_SIZE]; -struct buffer trash = { .area = trash_buf, .data = 0, .size = sizeof(trash_buf) }; +THREAD_LOCAL struct buffer trash = { .area = trash_buf, .data = 0, .size = sizeof(trash_buf) }; struct buffer tmp = { .area = tmp_buf, .data = 0, .size = sizeof(tmp_buf) }; /* displays a long memory block at , assuming first byte of