From 9b64c3bb51e6737f8cec3ebed4f57a7a70ef6327 Mon Sep 17 00:00:00 2001 From: Maschell Date: Wed, 5 Oct 2022 20:03:52 +0200 Subject: [PATCH] Only join the thread if it's not already terminated --- src/utils/CThread.h | 17 ++++++++++++----- src/utils/logger.h | 2 ++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/utils/CThread.h b/src/utils/CThread.h index 0f43168..46248f2 100644 --- a/src/utils/CThread.h +++ b/src/utils/CThread.h @@ -103,16 +103,23 @@ public: virtual void shutdownThread() { //! wait for thread to finish if (pThread && !(iAttributes & eAttributeDetach)) { - if (isThreadSuspended()) - resumeThread(); + if (!isThreadTerminated()) { + if (isThreadSuspended()) { + resumeThread(); + } - OSJoinThread(pThread, nullptr); + OSJoinThread(pThread, nullptr); + } else { + DEBUG_FUNCTION_LINE_WARN("Thread \"%s\" has already been terminated!!!", pThreadName.c_str()); + } } //! free the thread stack buffer - if (pThreadStack) + if (pThreadStack) { free(pThreadStack); - if (pThread) + } + if (pThread) { free(pThread); + } pThread = nullptr; pThreadStack = nullptr; diff --git a/src/utils/logger.h b/src/utils/logger.h index 7fbbfdc..1d22edd 100644 --- a/src/utils/logger.h +++ b/src/utils/logger.h @@ -42,6 +42,7 @@ extern "C" { #define DEBUG_FUNCTION_LINE_WRITE(FMT, ARGS...) LOG(WHBLogWritef, FMT, ##ARGS) #define DEBUG_FUNCTION_LINE_ERR(FMT, ARGS...) LOG_EX_DEFAULT(WHBLogPrintf, "##ERROR## ", "", FMT, ##ARGS) +#define DEBUG_FUNCTION_LINE_WARN(FMT, ARGS...) LOG_EX_DEFAULT(WHBLogPrintf, "##WARN ## ", "", FMT, ##ARGS) #define DEBUG_FUNCTION_LINE_ERR_LAMBDA(FILENAME, FUNCTION, LINE, FMT, ARGS...) LOG_EX(FILENAME, FUNCTION, LINE, WHBLogPrintf, "##ERROR## ", "", FMT, ##ARGS); @@ -56,6 +57,7 @@ extern "C" { #define DEBUG_FUNCTION_LINE_WRITE(FMT, ARGS...) while (0) #define DEBUG_FUNCTION_LINE_ERR(FMT, ARGS...) LOG_EX_DEFAULT(OSReport, "##ERROR## ", "\n", FMT, ##ARGS) +#define DEBUG_FUNCTION_LINE_WARN(FMT, ARGS...) LOG_EX_DEFAULT(OSReport, "##WARN ## ", "\n", FMT, ##ARGS) #define DEBUG_FUNCTION_LINE_ERR_LAMBDA(FILENAME, FUNCTION, LINE, FMT, ARGS...) LOG_EX(FILENAME, FUNCTION, LINE, OSReport, "##ERROR## ", "\n", FMT, ##ARGS);