X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/896ee459af10c73d20d0ae093b4c02348ffedb18..a0d3cf4aa8ffa76ed22a67efa4ea156eb2ef9f68:/src/versioncontrol/updateitemstatesthread.cpp diff --git a/src/versioncontrol/updateitemstatesthread.cpp b/src/versioncontrol/updateitemstatesthread.cpp index 7483e056e..ca212c97d 100644 --- a/src/versioncontrol/updateitemstatesthread.cpp +++ b/src/versioncontrol/updateitemstatesthread.cpp @@ -19,12 +19,17 @@ #include "updateitemstatesthread.h" -UpdateItemStatesThread::UpdateItemStatesThread(QObject* parent) : - QThread(parent), +UpdateItemStatesThread::UpdateItemStatesThread() : + QThread(), m_retrievedItems(false), - m_mutex(QMutex::Recursive), + m_mutex(0), m_itemStates() { + // Several threads may share one instance of a plugin. A global + // mutex is required to serialize the retrieval of version control + // states inside run(). + static QMutex globalMutex; + m_mutex = &globalMutex; } UpdateItemStatesThread::~UpdateItemStatesThread() @@ -49,7 +54,7 @@ void UpdateItemStatesThread::run() // VersionControlObserver::addDirectory() to be sure that the last item contains the root. const QString directory = m_itemStates.last().item.url().directory(KUrl::AppendTrailingSlash); - QMutexLocker locker(&m_mutex); + QMutexLocker locker(m_mutex); m_retrievedItems = false; if (m_plugin->beginRetrieval(directory)) { const int count = m_itemStates.count(); @@ -63,12 +68,12 @@ void UpdateItemStatesThread::run() bool UpdateItemStatesThread::beginReadItemStates() { - return m_mutex.tryLock(300); + return m_mutex->tryLock(300); } void UpdateItemStatesThread::endReadItemStates() { - m_mutex.unlock(); + m_mutex->unlock(); } QList UpdateItemStatesThread::itemStates() const