Fix mutex usage in the journal

All public function must lock the mutex. And therefore none of the journal
function may call public function because the mutex is already locked.

So have a public commit that lock the mutex,  and a private  commitInternal
that assume the mutex is locked
This commit is contained in:
Olivier Goffart 2013-11-25 15:11:37 +01:00
parent ca3885de2a
commit 6f17131e3c
2 changed files with 15 additions and 6 deletions

View file

@ -189,7 +189,7 @@ bool SyncJournalDb::checkConnect()
return sqlFail("Create table blacklist", createQuery); return sqlFail("Create table blacklist", createQuery);
} }
commit("checkConnect"); commitInternal("checkConnect");
bool rc = updateDatabaseStructure(); bool rc = updateDatabaseStructure();
if( rc ) { if( rc ) {
@ -282,7 +282,7 @@ bool SyncJournalDb::updateDatabaseStructure()
query.prepare("CREATE INDEX metadata_file_id ON metadata(fileid);"); query.prepare("CREATE INDEX metadata_file_id ON metadata(fileid);");
re = re && query.exec(); re = re && query.exec();
commit("update database structure"); commitInternal("update database structure");
} }
return re; return re;
@ -735,9 +735,17 @@ void SyncJournalDb::updateBlacklistEntry( const SyncJournalBlacklistRecord& item
if( !iQuery.exec() ) { if( !iQuery.exec() ) {
qDebug() << "SQL exec blacklistitem insert/update failed: "<< iQuery.lastError().text(); qDebug() << "SQL exec blacklistitem insert/update failed: "<< iQuery.lastError().text();
} }
} }
void SyncJournalDb::commit(const QString& context, bool startTrans ) void SyncJournalDb::commit(const QString& context, bool startTrans)
{
QMutexLocker lock(&_mutex);
commitInternal(context, startTrans);
}
void SyncJournalDb::commitInternal(const QString& context, bool startTrans )
{ {
qDebug() << "Transaction Start " << context; qDebug() << "Transaction Start " << context;
commitTransaction(); commitTransaction();

View file

@ -36,7 +36,6 @@ public:
bool deleteFileRecord( const QString& filename, bool recursively = false ); bool deleteFileRecord( const QString& filename, bool recursively = false );
int getFileRecordCount(); int getFileRecordCount();
bool exists(); bool exists();
QStringList tableColumns( const QString& table );
void updateBlacklistEntry( const SyncJournalBlacklistRecord& item ); void updateBlacklistEntry( const SyncJournalBlacklistRecord& item );
void wipeBlacklistEntry(const QString& file); void wipeBlacklistEntry(const QString& file);
@ -72,8 +71,6 @@ public:
void close(); void close();
void startTransaction();
void commitTransaction();
signals: signals:
@ -83,6 +80,10 @@ private:
qint64 getPHash(const QString& ) const; qint64 getPHash(const QString& ) const;
bool updateDatabaseStructure(); bool updateDatabaseStructure();
bool sqlFail(const QString& log, const QSqlQuery &query ); bool sqlFail(const QString& log, const QSqlQuery &query );
void commitInternal(const QString &context, bool startTrans = true);
void startTransaction();
void commitTransaction();
QStringList tableColumns( const QString& table );
bool checkConnect(); bool checkConnect();
QSqlDatabase _db; QSqlDatabase _db;