X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/896ee459af10c73d20d0ae093b4c02348ffedb18..a960935b00f653d5587f9233a0e84e3ecf7ea933:/src/versioncontrol/versioncontrolobserver.cpp diff --git a/src/versioncontrol/versioncontrolobserver.cpp b/src/versioncontrol/versioncontrolobserver.cpp index aea60b28d..a5e509055 100644 --- a/src/versioncontrol/versioncontrolobserver.cpp +++ b/src/versioncontrol/versioncontrolobserver.cpp @@ -75,9 +75,16 @@ VersionControlObserver::~VersionControlObserver() if (m_updateItemStatesThread != 0) { disconnect(m_updateItemStatesThread, SIGNAL(finished()), this, SLOT(applyUpdatedItemStates())); - m_updateItemStatesThread->deleteWhenFinished(); + if (m_updateItemStatesThread->isFinished()) { + delete m_updateItemStatesThread; + } else { + m_updateItemStatesThread->deleteWhenFinished(); + } m_updateItemStatesThread = 0; } + + m_plugin->disconnect(); + m_plugin = 0; } QList VersionControlObserver::contextMenuActions(const KFileItemList& items) const @@ -171,6 +178,12 @@ void VersionControlObserver::verifyDirectory() void VersionControlObserver::applyUpdatedItemStates() { + if (m_plugin == 0) { + // The signal finished() has been emitted, but the thread has been marked + // as invalid in the meantime. Just ignore the signal in this case. + return; + } + if (!m_updateItemStatesThread->retrievedItems()) { // ignore m_silentUpdate for an error message emit errorMessage(i18nc("@info:status", "Update of version information failed.")); @@ -211,7 +224,7 @@ void VersionControlObserver::updateItemStates() { Q_ASSERT(m_plugin != 0); if (m_updateItemStatesThread == 0) { - m_updateItemStatesThread = new UpdateItemStatesThread(this); + m_updateItemStatesThread = new UpdateItemStatesThread(); connect(m_updateItemStatesThread, SIGNAL(finished()), this, SLOT(applyUpdatedItemStates())); }