mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-25 05:45:42 +03:00
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:
parent
ca3885de2a
commit
6f17131e3c
2 changed files with 15 additions and 6 deletions
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue