From 421e0a2bf9b2522fc8ceca0ae7ca099a3fc98a60 Mon Sep 17 00:00:00 2001 From: Jason Ish Date: Thu, 18 Apr 2024 00:33:09 -0600 Subject: [PATCH] threads: don't attempt to join threads with an id of 0 Worker threads not created by Suricata, but instead a library user should not be joined, as Suricata does not have access to their thread handle, and it may in-fact be an unjoinable thread, such as the main process. When the thread ID is 0, assume the thread is "externally" managed, but still mark is as dead to satisfy Suricata's view of the thread. Ticket: #7240 --- src/tm-threads.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/tm-threads.c b/src/tm-threads.c index 75541f341c..a1d74a80fb 100644 --- a/src/tm-threads.c +++ b/src/tm-threads.c @@ -1355,9 +1355,12 @@ static int TmThreadKillThread(ThreadVars *tv) } } - /* join it and flag it as dead */ - pthread_join(tv->t, NULL); - SCLogDebug("thread %s stopped", tv->name); + /* Join the thread and flag as dead, unless the thread ID is 0 as + * its not a thread created by Suricata. */ + if (tv->t) { + pthread_join(tv->t, NULL); + SCLogDebug("thread %s stopped", tv->name); + } TmThreadsSetFlag(tv, THV_DEAD); return 1; }