diff --git a/src/detect-engine.c b/src/detect-engine.c index f77452873a..6c42fedd25 100644 --- a/src/detect-engine.c +++ b/src/detect-engine.c @@ -3153,6 +3153,9 @@ static TmEcode DetectEngineThreadCtxInitForMT(ThreadVars *tv, DetectEngineThread uint32_t max_tenant_id = 0; DetectEngineCtx *list = master->list; + DEBUG_VALIDATE_BUG_ON(!SCMutexIsLocked(&master->lock)); + + /* coverity[missing_lock] */ if (master->tenant_selector == TENANT_SELECTOR_UNKNOWN) { SCLogError("no tenant selector set: " "set using multi-detect.selector"); diff --git a/src/threads-debug.h b/src/threads-debug.h index cff56a0a47..c5e357275d 100644 --- a/src/threads-debug.h +++ b/src/threads-debug.h @@ -116,6 +116,7 @@ #define SCMutexInit(mut, mutattrs) SCMutexInit_dbg(mut, mutattrs) #define SCMutexLock(mut) SCMutexLock_dbg(mut) #define SCMutexTrylock(mut) SCMutexTrylock_dbg(mut) +#define SCMutexIsLocked(mut) (SCMutexTrylock(mut) == EBUSY) #define SCMutexUnlock(mut) SCMutexUnlock_dbg(mut) #define SCMutexDestroy pthread_mutex_destroy #define SCMUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER diff --git a/src/threads-profile.h b/src/threads-profile.h index 5e6c374e3b..16f7e8a94a 100644 --- a/src/threads-profile.h +++ b/src/threads-profile.h @@ -90,6 +90,7 @@ extern thread_local uint64_t mutex_lock_cnt; #define SCMutexInit(mut, mutattr ) pthread_mutex_init(mut, mutattr) #define SCMutexLock(mut) SCMutexLock_profile(mut) #define SCMutexTrylock(mut) pthread_mutex_trylock(mut) +#define SCMutexIsLocked(mut) (SCMutexTrylock(mut) == EBUSY) #define SCMutexUnlock(mut) pthread_mutex_unlock(mut) #define SCMutexDestroy pthread_mutex_destroy #define SCMUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER diff --git a/src/threads.c b/src/threads.c index 919e6422e3..e0cb8cbcc5 100644 --- a/src/threads.c +++ b/src/threads.c @@ -43,6 +43,7 @@ static int ThreadMacrosTest01Mutex(void) r |= SCMutexInit(&mut, NULL); r |= SCMutexLock(&mut); r |= (SCMutexTrylock(&mut) == EBUSY)? 0 : 1; + r |= SCMutexIsLocked(&mut) ? 0 : 1; r |= SCMutexUnlock(&mut); r |= SCMutexDestroy(&mut); diff --git a/src/threads.h b/src/threads.h index b16848f034..117c4c4a6a 100644 --- a/src/threads.h +++ b/src/threads.h @@ -118,6 +118,7 @@ enum { #define SCMutexInit(mut, mutattr ) pthread_mutex_init(mut, mutattr) #define SCMutexLock(mut) pthread_mutex_lock(mut) #define SCMutexTrylock(mut) pthread_mutex_trylock(mut) +#define SCMutexIsLocked(mut) (SCMutexTrylock(mut) == EBUSY) #define SCMutexUnlock(mut) pthread_mutex_unlock(mut) #define SCMutexDestroy pthread_mutex_destroy #define SCMUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER