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;
uint32_t map_cnt = 0;
uint32_t max_tenant_id = 0;
DetectEngineCtx *list = master->list;
- HashTable *mt_det_ctxs_hash = NULL;
if (master->tenant_selector == TENANT_SELECTOR_UNKNOWN) {
SCLogError("no tenant selector set: "
"set using multi-detect.selector");
+ SCMutexUnlock(&master->lock);
return TM_ECODE_FAILED;
}
tcnt++;
}
- mt_det_ctxs_hash = HashTableInit(tcnt * 2, TenantIdHash, TenantIdCompare, TenantIdFree);
+ HashTable *mt_det_ctxs_hash =
+ HashTableInit(tcnt * 2, TenantIdHash, TenantIdCompare, TenantIdFree);
if (mt_det_ctxs_hash == NULL) {
goto error;
}
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;
}
return de_ctx;
}
-/** TODO locking? Not needed if this is a one time setting at startup */
-int DetectEngineMultiTenantEnabled(void)
+bool DetectEngineMultiTenantEnabled(void)
{
DetectEngineMasterCtx *master = &g_master_de_ctx;
- return (master->multi_tenant_enabled);
+ SCMutexLock(&master->lock);
+ bool enabled = master->multi_tenant_enabled;
+ SCMutexUnlock(&master->lock);
+ return enabled;
}
/** \internal
int DetectEngineReload(const SCInstance *suri);
int DetectEngineEnabled(void);
int DetectEngineMTApply(void);
-int DetectEngineMultiTenantEnabled(void);
+bool DetectEngineMultiTenantEnabled(void);
int DetectEngineMultiTenantSetup(const bool unix_socket);
int DetectEngineReloadStart(void);