forked from qt-creator/qt-creator
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:
@@ -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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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)
|
||||||
|
Reference in New Issue
Block a user