MINOR: debug: always reset the dump pointer when done
authorWilly Tarreau <w@1wt.eu>
Thu, 10 Apr 2025 11:55:52 +0000 (13:55 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 17 Apr 2025 15:04:35 +0000 (17:04 +0200)
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.

(cherry picked from commit 5646ec4d40cd102733da12a6a2d191434b33060a)
Signed-off-by: Willy Tarreau <w@1wt.eu>

src/debug.c

index 8b94512..0e74aa4 100644 (file)
@@ -463,12 +463,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
- * <buf> 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;
 
@@ -481,7 +481,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);
 }
@@ -581,7 +581,7 @@ static 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