From: Willy Tarreau Date: Thu, 10 Apr 2025 11:55:52 +0000 (+0200) Subject: MINOR: debug: always reset the dump pointer when done X-Git-Tag: v3.2-dev11~19 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5646ec4d40cd102733da12a6a2d191434b33060a;p=thirdparty%2Fhaproxy.git MINOR: debug: always reset the dump pointer when done We don't need to copy the old dump pointer to the thread_dump_pointer area anymore to indicate a dump is collected. It used to be done as an artificial way to keep the pointer for the post-mortem analysis but since we now have this pointer stored separately, that's no longer needed and it simplifies the mechanim to reset it. --- diff --git a/src/debug.c b/src/debug.c index 8a5a07f89..ed29d70e6 100644 --- a/src/debug.c +++ b/src/debug.c @@ -465,12 +465,12 @@ struct buffer *ha_thread_dump_fill(struct buffer *buf, int thr) return (struct buffer *)((ulong)old & ~0x1UL); } -/* Indicates to the called thread that the dumped data are collected by writing - * into the designated thread's dump buffer (usually buf is NULL). It - * waits for the dump to be completed if it was not the case, and can also - * leave if the pointer is NULL (e.g. if a thread has aborted). +/* Indicates to the called thread that the dumped data are collected by + * clearing the thread_dump_buffer pointer. It waits for the dump to be + * completed if it was not the case, and can also leave if the pointer + * is already NULL (e.g. if a thread has aborted). */ -void ha_thread_dump_done(struct buffer *buf, int thr) +void ha_thread_dump_done(int thr) { struct buffer *old; @@ -483,7 +483,7 @@ void ha_thread_dump_done(struct buffer *buf, int thr) ha_thread_relax(); continue; } - } while (!HA_ATOMIC_CAS(&ha_thread_ctx[thr].thread_dump_buffer, &old, buf)); + } while (!HA_ATOMIC_CAS(&ha_thread_ctx[thr].thread_dump_buffer, &old, NULL)); HA_ATOMIC_AND(&th_ctx->flags, ~TH_FL_DUMPING_OTHERS); } @@ -584,7 +584,7 @@ int cli_io_handler_show_threads(struct appctx *appctx) do { chunk_reset(&trash); if (ha_thread_dump_fill(&trash, *thr)) { - ha_thread_dump_done(NULL, *thr); + ha_thread_dump_done(*thr); if (applet_putchk(appctx, &trash) == -1) { /* failed, try again */ return 0; @@ -757,7 +757,7 @@ void ha_panic() DISGUISE(write(2, buf->area, buf->data)); /* restore the thread's dump pointer for easier post-mortem analysis */ - ha_thread_dump_done(buf, thr); + ha_thread_dump_done(thr); } #ifdef USE_LUA @@ -847,7 +847,7 @@ void ha_stuck_warning(int thr) if (ha_thread_dump_fill(&buf, thr)) { DISGUISE(write(2, buf.area, buf.data)); /* restore the thread's dump pointer for easier post-mortem analysis */ - ha_thread_dump_done(NULL, thr); + ha_thread_dump_done(thr); } #ifdef USE_LUA