#define GDBM_CACHE_SIZE 10 /* GDBM default == 100 */
GHashTable *hashtable = NULL;
+static pthread_mutex_t fmutex = PTHREAD_MUTEX_INITIALIZER;
enum tag_type {
TAG_TYPE_PLATFORM,
snprintf(key_internal, sizeof(key_internal),
"%s%s:%s:%s", KEY_PREFIX, key, type, tag_s);
+ pthread_mutex_lock(&fmutex);
if (!hashtable) {
hashtable = g_hash_table_new_full(g_str_hash, g_str_equal, destroy_key_value, destroy_key_value);
} else {
temp = (char *)g_hash_table_lookup(hashtable, key_internal);
if (temp) {
snprintf(value, len, "%s", temp);
+ pthread_mutex_unlock(&fmutex);
return SYSTEM_INFO_ERROR_NONE;
}
}
db = gdbm_open(SYSTEM_INFO_DB_PATH, 0, GDBM_READER, S_IRUSR | S_IRGRP | S_IROTH, NULL);
if (!db) {
_E("Failed to open db (%d, %s)", gdbm_errno, gdbm_strerror(gdbm_errno)); //LCOV_EXCL_LINE
+ pthread_mutex_unlock(&fmutex);
return SYSTEM_INFO_ERROR_IO_ERROR; //LCOV_EXCL_LINE
}
out:
if (db)
gdbm_close(db);
+ pthread_mutex_unlock(&fmutex);
return ret;
}
return -EINVAL;
}
+ pthread_mutex_lock(&fmutex);
if (!hashtable) {
hashtable = g_hash_table_new_full(g_str_hash, g_str_equal, destroy_key_value, destroy_key_value);
} else {
continue;
*type = info_type[i].type_e;
+ pthread_mutex_unlock(&fmutex);
return SYSTEM_INFO_ERROR_NONE;
}
}
db = gdbm_open(SYSTEM_INFO_DB_PATH, 0, GDBM_READER, S_IRUSR | S_IRGRP | S_IROTH, NULL);
if (!db) {
_E("Failed to open db (%d, %s)", gdbm_errno, gdbm_strerror(gdbm_errno)); //LCOV_EXCL_LINE
+ pthread_mutex_unlock(&fmutex);
return SYSTEM_INFO_ERROR_IO_ERROR; //LCOV_EXCL_LINE
}
out:
if (db)
gdbm_close(db);
+ pthread_mutex_unlock(&fmutex);
return ret;
}