From 05fbfb520f9ea50d1a8236c48abbe8a5aeb95d16 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 4 Oct 2013 21:02:23 +0200 Subject: [PATCH] Protect the sync database by a mutex since it is used by the thread --- src/mirall/syncjournaldb.cpp | 5 +++++ src/mirall/syncjournaldb.h | 10 ++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/mirall/syncjournaldb.cpp b/src/mirall/syncjournaldb.cpp index bd50e7c8d0..4815a23b9e 100644 --- a/src/mirall/syncjournaldb.cpp +++ b/src/mirall/syncjournaldb.cpp @@ -40,6 +40,7 @@ SyncJournalDb::SyncJournalDb(const QString& path, QObject *parent) : bool SyncJournalDb::exists() { + QMutexLocker locker(&_mutex); return (!_dbFile.isEmpty() && QFile::exists(_dbFile)); } @@ -115,6 +116,7 @@ qint64 SyncJournalDb::getPHash(const QString& file) const bool SyncJournalDb::setFileRecord( const SyncJournalFileRecord& record ) { + QMutexLocker locker(&_mutex); qlonglong phash = getPHash(record._path); if( checkConnect() ) { @@ -169,6 +171,7 @@ bool SyncJournalDb::setFileRecord( const SyncJournalFileRecord& record ) bool SyncJournalDb::deleteFileRecord(const QString& filename) { + QMutexLocker locker(&_mutex); qlonglong phash = getPHash(filename); if( checkConnect() ) { @@ -191,6 +194,8 @@ bool SyncJournalDb::deleteFileRecord(const QString& filename) SyncJournalFileRecord SyncJournalDb::getFileRecord( const QString& filename ) { + QMutexLocker locker(&_mutex); + qlonglong phash = getPHash( filename ); SyncJournalFileRecord rec; diff --git a/src/mirall/syncjournaldb.h b/src/mirall/syncjournaldb.h index 1c3594bddb..476270c7bc 100644 --- a/src/mirall/syncjournaldb.h +++ b/src/mirall/syncjournaldb.h @@ -15,6 +15,7 @@ #define SYNCJOURNALDB_H #include +#include #include namespace Mirall { @@ -25,25 +26,22 @@ class SyncJournalDb : public QObject Q_OBJECT public: explicit SyncJournalDb(const QString& path, QObject *parent = 0); - SyncJournalFileRecord getFileRecord( const QString& filename ); - bool setFileRecord( const SyncJournalFileRecord& record ); bool deleteFileRecord( const QString& filename ); int getFileRecordCount(); - - QSqlDatabase *getDB(){ return &_db; } bool exists(); - bool checkConnect(); - qint64 getPHash(const QString& ) const; signals: public slots: private: + qint64 getPHash(const QString& ) const; + bool checkConnect(); QSqlDatabase _db; QString _dbFile; + QMutex _mutex; // Public functions are protected with the mutex. };