diff --git a/src/apps/relay/dbdrivers/dbd_sqlite.c b/src/apps/relay/dbdrivers/dbd_sqlite.c index d1d7a94..e6c7835 100644 --- a/src/apps/relay/dbdrivers/dbd_sqlite.c +++ b/src/apps/relay/dbdrivers/dbd_sqlite.c @@ -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);