From 180bcbef8ac772d0856a51461ac83f3ae1d8a5fb Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Tue, 5 Jul 2022 14:45:41 +0200 Subject: [PATCH] Sqlite: Fix locking Change-Id: I32a1435db21f6d891dd9bed4faada704aeaf43af Reviewed-by: Thomas Hartmann Reviewed-by: Reviewed-by: Tim Jenssen --- src/libs/sqlite/sqlitedatabase.cpp | 16 ---------------- src/libs/sqlite/sqlitedatabase.h | 20 +++++++++++++++++--- tests/unit/unittest/sqlitedatabase-test.cpp | 3 ++- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/libs/sqlite/sqlitedatabase.cpp b/src/libs/sqlite/sqlitedatabase.cpp index 96e6a87b8ac..69581713666 100644 --- a/src/libs/sqlite/sqlitedatabase.cpp +++ b/src/libs/sqlite/sqlitedatabase.cpp @@ -238,22 +238,6 @@ void Database::sessionRollback() m_statements->rollbackBegin.execute(); } -void Database::lock() -{ - m_databaseMutex.lock(); -#ifdef UNIT_TESTS - m_isLocked = true; -#endif -} - -void Database::unlock() -{ -#ifdef UNIT_TESTS - m_isLocked = false; -#endif - m_databaseMutex.unlock(); -} - DatabaseBackend &Database::backend() { return m_databaseBackend; diff --git a/src/libs/sqlite/sqlitedatabase.h b/src/libs/sqlite/sqlitedatabase.h index 3804d6c7a30..b0f83defc2a 100644 --- a/src/libs/sqlite/sqlitedatabase.h +++ b/src/libs/sqlite/sqlitedatabase.h @@ -154,14 +154,28 @@ public: bool isLocked() const { -#ifdef UNIT_TESTS +#ifdef QT_DEBUG return m_isLocked; #else return true; #endif } - void lock() override; - void unlock() override; + + void lock() override + { + m_databaseMutex.lock(); +#ifdef QT_DEBUG + m_isLocked = true; +#endif + } + + void unlock() override + { +#ifdef QT_DEBUG + m_isLocked = false; +#endif + m_databaseMutex.unlock(); + } void deferredBegin() override; void immediateBegin() override; diff --git a/tests/unit/unittest/sqlitedatabase-test.cpp b/tests/unit/unittest/sqlitedatabase-test.cpp index f95c4d84737..d1e70401e38 100644 --- a/tests/unit/unittest/sqlitedatabase-test.cpp +++ b/tests/unit/unittest/sqlitedatabase-test.cpp @@ -127,11 +127,12 @@ TEST_F(SqliteDatabase, CreateDatabaseWithLockingModeNormal) TEST_F(SqliteDatabase, ExclusivelyLockedDatabaseIsLockedForSecondConnection) { + using namespace std::chrono_literals; Utils::PathString path{Utils::TemporaryDirectory::masterDirectoryPath() + "/database_exclusive_locked.db"}; Sqlite::Database database{path}; - ASSERT_THROW(Sqlite::Database database2{path}, Sqlite::StatementIsBusy); + ASSERT_THROW(Sqlite::Database database2(path, 1ms), Sqlite::StatementIsBusy); } TEST_F(SqliteDatabase, NormalLockedDatabaseCanBeReopened)