{
Dataset *set = NULL;
+ DatasetLock();
int ret = DatasetGetOrCreate(name, type, NULL, load, &memcap, &hashsize, &set);
if (ret < 0) {
SCLogError("dataset with JSON %s creation failed", name);
+ DatasetUnlock();
return NULL;
}
if (ret == 1) {
* \return 0 on successful creation
* \return 1 if the dataset already exists
*
- * dataset global lock is held after return if set is found or created
+ * Calling function is responsible for locking via DatasetLock()
*/
int DatasetGetOrCreate(const char *name, enum DatasetTypes type, const char *save, const char *load,
uint64_t *memcap, uint32_t *hashsize, Dataset **ret_set)
return -1;
}
- DatasetLock();
Dataset *set = DatasetSearchByName(name);
if (set) {
if (type != DATASET_TYPE_NOTSET && set->type != type) {
SCLogError("dataset %s already "
"exists and is of type %u",
set->name, set->type);
- DatasetUnlock();
return -1;
}
if ((load == NULL && strlen(set->load) > 0) ||
(load != NULL && strcmp(set->load, load) != 0)) {
SCLogError("dataset %s load mismatch: %s != %s", set->name, set->load, load);
- DatasetUnlock();
return -1;
}
}
}
SCFree(set);
}
- DatasetUnlock();
return -1;
}
{
Dataset *set = NULL;
+ DatasetLock();
int ret = DatasetGetOrCreate(name, type, save, load, &memcap, &hashsize, &set);
if (ret < 0) {
SCLogError("dataset %s creation failed", name);
+ DatasetUnlock();
return NULL;
}
if (ret == 1) {