Sqlite: Fix locking

Change-Id: I32a1435db21f6d891dd9bed4faada704aeaf43af
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Marco Bubke
2022-07-05 14:45:41 +02:00
parent 936ae86598
commit 180bcbef8a
3 changed files with 19 additions and 20 deletions

View File

@@ -238,22 +238,6 @@ void Database::sessionRollback()
m_statements->rollbackBegin.execute(); 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() DatabaseBackend &Database::backend()
{ {
return m_databaseBackend; return m_databaseBackend;

View File

@@ -154,14 +154,28 @@ public:
bool isLocked() const bool isLocked() const
{ {
#ifdef UNIT_TESTS #ifdef QT_DEBUG
return m_isLocked; return m_isLocked;
#else #else
return true; return true;
#endif #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 deferredBegin() override;
void immediateBegin() override; void immediateBegin() override;

View File

@@ -127,11 +127,12 @@ TEST_F(SqliteDatabase, CreateDatabaseWithLockingModeNormal)
TEST_F(SqliteDatabase, ExclusivelyLockedDatabaseIsLockedForSecondConnection) TEST_F(SqliteDatabase, ExclusivelyLockedDatabaseIsLockedForSecondConnection)
{ {
using namespace std::chrono_literals;
Utils::PathString path{Utils::TemporaryDirectory::masterDirectoryPath() Utils::PathString path{Utils::TemporaryDirectory::masterDirectoryPath()
+ "/database_exclusive_locked.db"}; + "/database_exclusive_locked.db"};
Sqlite::Database database{path}; 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) TEST_F(SqliteDatabase, NormalLockedDatabaseCanBeReopened)