static int DetectEngineThreadCtxInitGlobalKeywords(DetectEngineThreadCtx *det_ctx)
{
- DetectEngineMasterCtx *master = &g_master_de_ctx;
- SCMutexLock(&master->lock);
+ const DetectEngineMasterCtx *master = &g_master_de_ctx;
if (master->keyword_id > 0) {
det_ctx->global_keyword_ctxs_array = (void **)SCCalloc(master->keyword_id, sizeof(void *));
if (det_ctx->global_keyword_ctxs_array == NULL) {
SCLogError(SC_ERR_DETECT_PREPARE, "setting up thread local detect ctx");
- goto error;
+ return TM_ECODE_FAILED;
}
det_ctx->global_keyword_ctxs_size = master->keyword_id;
- DetectEngineThreadKeywordCtxItem *item = master->keyword_list;
+ const DetectEngineThreadKeywordCtxItem *item = master->keyword_list;
while (item) {
det_ctx->global_keyword_ctxs_array[item->id] = item->InitFunc(item->data);
if (det_ctx->global_keyword_ctxs_array[item->id] == NULL) {
SCLogError(SC_ERR_DETECT_PREPARE, "setting up thread local detect ctx "
"for keyword \"%s\" failed", item->name);
- goto error;
+ return TM_ECODE_FAILED;
}
item = item->next;
}
}
- SCMutexUnlock(&master->lock);
return TM_ECODE_OK;
-error:
- SCMutexUnlock(&master->lock);
- return TM_ECODE_FAILED;
}
static void DetectEngineThreadCtxDeinitGlobalKeywords(DetectEngineThreadCtx *det_ctx)
return;
}
- DetectEngineMasterCtx *master = &g_master_de_ctx;
- SCMutexLock(&master->lock);
-
+ const DetectEngineMasterCtx *master = &g_master_de_ctx;
if (master->keyword_id > 0) {
- DetectEngineThreadKeywordCtxItem *item = master->keyword_list;
+ const DetectEngineThreadKeywordCtxItem *item = master->keyword_list;
while (item) {
if (det_ctx->global_keyword_ctxs_array[item->id] != NULL)
item->FreeFunc(det_ctx->global_keyword_ctxs_array[item->id]);
SCFree(det_ctx->global_keyword_ctxs_array);
det_ctx->global_keyword_ctxs_array = NULL;
}
- SCMutexUnlock(&master->lock);
}
static int DetectEngineThreadCtxInitKeywords(DetectEngineCtx *de_ctx, DetectEngineThreadCtx *det_ctx)
BUG_ON(InitFunc == NULL || FreeFunc == NULL);
DetectEngineMasterCtx *master = &g_master_de_ctx;
- SCMutexLock(&master->lock);
/* if already registered, return existing id */
DetectEngineThreadKeywordCtxItem *item = master->keyword_list;
while (item != NULL) {
if (strcmp(name, item->name) == 0) {
id = item->id;
- SCMutexUnlock(&master->lock);
return id;
}
item = SCCalloc(1, sizeof(*item));
if (unlikely(item == NULL)) {
- SCMutexUnlock(&master->lock);
return -1;
}
item->InitFunc = InitFunc;
item->id = master->keyword_id++;
id = item->id;
- SCMutexUnlock(&master->lock);
return id;
}