Protect the sync database by a mutex since it is used by the thread

This commit is contained in:
Olivier Goffart 2013-10-04 21:02:23 +02:00
parent 805e1330ad
commit 05fbfb520f
2 changed files with 9 additions and 6 deletions

View file

@ -40,6 +40,7 @@ SyncJournalDb::SyncJournalDb(const QString& path, QObject *parent) :
bool SyncJournalDb::exists() bool SyncJournalDb::exists()
{ {
QMutexLocker locker(&_mutex);
return (!_dbFile.isEmpty() && QFile::exists(_dbFile)); return (!_dbFile.isEmpty() && QFile::exists(_dbFile));
} }
@ -115,6 +116,7 @@ qint64 SyncJournalDb::getPHash(const QString& file) const
bool SyncJournalDb::setFileRecord( const SyncJournalFileRecord& record ) bool SyncJournalDb::setFileRecord( const SyncJournalFileRecord& record )
{ {
QMutexLocker locker(&_mutex);
qlonglong phash = getPHash(record._path); qlonglong phash = getPHash(record._path);
if( checkConnect() ) { if( checkConnect() ) {
@ -169,6 +171,7 @@ bool SyncJournalDb::setFileRecord( const SyncJournalFileRecord& record )
bool SyncJournalDb::deleteFileRecord(const QString& filename) bool SyncJournalDb::deleteFileRecord(const QString& filename)
{ {
QMutexLocker locker(&_mutex);
qlonglong phash = getPHash(filename); qlonglong phash = getPHash(filename);
if( checkConnect() ) { if( checkConnect() ) {
@ -191,6 +194,8 @@ bool SyncJournalDb::deleteFileRecord(const QString& filename)
SyncJournalFileRecord SyncJournalDb::getFileRecord( const QString& filename ) SyncJournalFileRecord SyncJournalDb::getFileRecord( const QString& filename )
{ {
QMutexLocker locker(&_mutex);
qlonglong phash = getPHash( filename ); qlonglong phash = getPHash( filename );
SyncJournalFileRecord rec; SyncJournalFileRecord rec;

View file

@ -15,6 +15,7 @@
#define SYNCJOURNALDB_H #define SYNCJOURNALDB_H
#include <QObject> #include <QObject>
#include <qmutex.h>
#include <QSqlDatabase> #include <QSqlDatabase>
namespace Mirall { namespace Mirall {
@ -25,25 +26,22 @@ class SyncJournalDb : public QObject
Q_OBJECT Q_OBJECT
public: public:
explicit SyncJournalDb(const QString& path, QObject *parent = 0); explicit SyncJournalDb(const QString& path, QObject *parent = 0);
SyncJournalFileRecord getFileRecord( const QString& filename ); SyncJournalFileRecord getFileRecord( const QString& filename );
bool setFileRecord( const SyncJournalFileRecord& record ); bool setFileRecord( const SyncJournalFileRecord& record );
bool deleteFileRecord( const QString& filename ); bool deleteFileRecord( const QString& filename );
int getFileRecordCount(); int getFileRecordCount();
QSqlDatabase *getDB(){ return &_db; }
bool exists(); bool exists();
bool checkConnect();
qint64 getPHash(const QString& ) const;
signals: signals:
public slots: public slots:
private: private:
qint64 getPHash(const QString& ) const;
bool checkConnect();
QSqlDatabase _db; QSqlDatabase _db;
QString _dbFile; QString _dbFile;
QMutex _mutex; // Public functions are protected with the mutex.
}; };