static uint32_t DetectEngineTenantGetIdFromVlanId(const void *ctx, const Packet *p);
static uint32_t DetectEngineTenantGetIdFromPcap(const void *ctx, const Packet *p);
+static bool DetectEngineMultiTenantEnabledWithLock(void);
static DetectEngineAppInspectionEngine *g_app_inspect_engines = NULL;
static DetectEnginePktInspectionEngine *g_pkt_inspect_engines = NULL;
static DetectEngineFrameInspectionEngine *g_frame_inspect_engines = NULL;
static TmEcode DetectEngineThreadCtxInitForMT(ThreadVars *tv, DetectEngineThreadCtx *det_ctx)
{
DetectEngineMasterCtx *master = &g_master_de_ctx;
- SCMutexLock(&master->lock);
DetectEngineTenantMapping *map_array = NULL;
uint32_t map_array_size = 0;
if (master->tenant_selector == TENANT_SELECTOR_UNKNOWN) {
SCLogError("no tenant selector set: "
"set using multi-detect.selector");
- SCMutexUnlock(&master->lock);
return TM_ECODE_FAILED;
}
break;
}
- SCMutexUnlock(&master->lock);
return TM_ECODE_OK;
error:
if (map_array != NULL)
if (mt_det_ctxs_hash != NULL)
HashTableFree(mt_det_ctxs_hash);
- SCMutexUnlock(&master->lock);
return TM_ECODE_FAILED;
}
#endif
if (DetectEngineMultiTenantEnabled()) {
+ DetectEngineMasterCtx *master = &g_master_de_ctx;
+ SCMutexLock(&master->lock);
if (DetectEngineThreadCtxInitForMT(tv, det_ctx) != TM_ECODE_OK) {
DetectEngineThreadCtxDeinit(tv, det_ctx);
+ SCMutexUnlock(&master->lock);
return TM_ECODE_FAILED;
}
+ SCMutexUnlock(&master->lock);
}
/* pass thread data back to caller */
det_ctx->counter_match_list = StatsRegisterAvgCounter("detect.match_list", tv);
#endif
- if (mt && DetectEngineMultiTenantEnabled()) {
+ if (mt && DetectEngineMultiTenantEnabledWithLock()) {
if (DetectEngineThreadCtxInitForMT(tv, det_ctx) != TM_ECODE_OK) {
DetectEngineDeReference(&det_ctx->de_ctx);
SCFree(det_ctx);
return de_ctx;
}
+static bool DetectEngineMultiTenantEnabledWithLock(void)
+{
+ DetectEngineMasterCtx *master = &g_master_de_ctx;
+ return master->multi_tenant_enabled;
+}
+
bool DetectEngineMultiTenantEnabled(void)
{
DetectEngineMasterCtx *master = &g_master_de_ctx;
SCMutexLock(&master->lock);
- bool enabled = master->multi_tenant_enabled;
+ bool enabled = DetectEngineMultiTenantEnabledWithLock();
SCMutexUnlock(&master->lock);
return enabled;
}