Fix sqlite3_config call only once before using any other sqlite utilities

This commit is contained in:
Serhii Charykov 2021-04-26 22:19:16 +03:00
parent 0b709a05b7
commit 34e18533cf

View File

@ -95,10 +95,9 @@ static void sqlite_unlock(int write)
//////////////////////////////////////////////////
static int sqlite_init_multithreaded(void) {
static int _sqlite_init_multithreaded(void) {
#if defined(SQLITE_CONFIG_MULTITHREAD)
if (sqlite3_threadsafe() > 0) {
int retCode = sqlite3_config(SQLITE_CONFIG_MULTITHREAD);
if (retCode != SQLITE_OK) {
@ -117,6 +116,10 @@ static int sqlite_init_multithreaded(void) {
return 0;
}
static void sqlite_init_multithreaded(void) {
(void) _sqlite_init_multithreaded();
}
static int donot_print_connection_success = 0;
static void fix_user_directory(char *dir0) {
@ -172,6 +175,8 @@ static void init_sqlite_database(sqlite3 *sqliteconnection) {
}
}
pthread_once_t sqlite_init_once = PTHREAD_ONCE_INIT;
static sqlite3 * get_sqlite_connection(void) {
persistent_users_db_t *pud = get_persistent_users_db();
@ -179,7 +184,7 @@ static sqlite3 * get_sqlite_connection(void) {
sqlite3 *sqliteconnection = (sqlite3 *)pthread_getspecific(connection_key);
if(!sqliteconnection) {
fix_user_directory(pud->userdb);
sqlite_init_multithreaded();
(void) pthread_once(&sqlite_init_once, sqlite_init_multithreaded);
int rc = sqlite3_open(pud->userdb, &sqliteconnection);
if(!sqliteconnection || (rc != SQLITE_OK)) {
const char* errmsg = sqlite3_errmsg(sqliteconnection);