Fix crash when deleting account while sync is running #4337
authorChristian Kamm <mail@ckamm.de>
Thu, 7 Jan 2016 12:54:26 +0000 (13:54 +0100)
committerChristian Kamm <mail@ckamm.de>
Thu, 7 Jan 2016 12:54:26 +0000 (13:54 +0100)
src/gui/folder.cpp
src/gui/folder.h

index 0db67d103122122b2aff3aea4b6322b1f5fa2801..04830219d02aa29cdb44c134a8cdd4e2de24cec1 100644 (file)
@@ -247,7 +247,9 @@ QString Folder::remotePath() const
 
 QUrl Folder::remoteUrl() const
 {
-    Q_ASSERT(_accountState);
+    if (!_accountState) {
+        return QUrl("http://deleted-account");
+    }
     return Account::concatUrlPath(_accountState->account()->davUrl(), remotePath());
 }
 
@@ -298,7 +300,10 @@ void Folder::slotRunEtagJob()
 {
     qDebug() << "* Trying to check" << remoteUrl().toString() << "for changes via ETag check. (time since last sync:" << (_timeSinceLastSyncDone.elapsed() / 1000) << "s)";
 
-    Q_ASSERT(_accountState );
+    if (!_accountState) {
+        qDebug() << "Can't run EtagJob, account is deleted";
+        return;
+    }
 
     AccountPtr account = _accountState->account();
 
@@ -703,7 +708,11 @@ bool Folder::estimateState(QString fn, csync_ftw_type_e t, SyncFileStatus* s)
 
 void Folder::saveToSettings() const
 {
-    Q_ASSERT(_accountState);
+    if (!_accountState) {
+        qDebug() << "Can't save folder to settings, account is deleted";
+        return;
+    }
+
     auto settings = _accountState->settings();
     settings->beginGroup(QLatin1String("Folders"));
     FolderDefinition::save(*settings, _definition);
@@ -714,7 +723,10 @@ void Folder::saveToSettings() const
 
 void Folder::removeFromSettings() const
 {
-    Q_ASSERT(_accountState);
+    if (!_accountState) {
+        qDebug() << "Can't remove folder from settings, account is deleted";
+        return;
+    }
 
     auto  settings = _accountState->settings();
     settings->beginGroup(QLatin1String("Folders"));
@@ -851,7 +863,10 @@ bool Folder::proxyDirty()
 
 void Folder::startSync(const QStringList &pathList)
 {
-    Q_ASSERT(_accountState);
+    if (!_accountState) {
+        qDebug() << "Can't startSync, account is deleted";
+        return;
+    }
 
     Q_UNUSED(pathList)
     if (!_csync_ctx) {
index ea7ad712cab8db02b05f821e76df6f52a136e093..eacbc6d44ac6a00e74b2db3edbc11bea79460e8f 100644 (file)
@@ -282,7 +282,7 @@ private:
     void createGuiLog(const QString& filename, SyncFileStatus status, int count,
                        const QString& renameTarget = QString::null );
 
-    AccountState* _accountState;
+    QPointer<AccountState> _accountState;
     FolderDefinition _definition;
 
     SyncResult _syncResult;