MINOR: debug: implement ha_panic()

This function dumps all existing threads using the thread dump mechanism
then aborts. This will be used by the lockup detection and by debugging
tools.
This commit is contained in:
Willy Tarreau 2019-05-20 13:48:29 +02:00
parent 9fc5dcbd71
commit 56131ca58e
2 changed files with 12 additions and 0 deletions

View File

@ -87,6 +87,7 @@ struct buffer;
void ha_task_dump(struct buffer *buf, const struct task *task, const char *pfx);
void ha_thread_dump(struct buffer *buf, int thr, int calling_tid);
void ha_thread_dump_all_to_trash();
void ha_panic();
/* This one is useful to automatically apply poisonning on an area returned
* by malloc(). Only "p_" is required to make it work, and to define a poison

View File

@ -136,6 +136,17 @@ static int cli_io_handler_show_threads(struct appctx *appctx)
return 1;
}
/* dumps a state of all threads into the trash and on fd #2, then aborts. */
void ha_panic()
{
chunk_reset(&trash);
chunk_appendf(&trash, "Thread %u is about to kill the process.\n", tid);
ha_thread_dump_all_to_trash();
write(2, trash.area, trash.data);
for (;;)
abort();
}
#ifndef USE_THREAD_DUMP
/* This function dumps all threads' state to the trash. This version is the