ClearCase: Fix race condition

setStatus() is invoked in the main thread, but the
status change is tested for in the sync thread...

Change-Id: Ib322e12e7d40dafa6b60f3a73a202e8e1dcbfb53
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Orgad Shaneh
2012-11-12 16:48:26 +02:00
committed by Orgad Shaneh
parent 691ade1747
commit 3f44c6d0be
4 changed files with 11 additions and 16 deletions

View File

@@ -81,6 +81,7 @@
#include <QMainWindow>
#include <QMenu>
#include <QMessageBox>
#include <QMetaObject>
#include <QMutex>
#include <QProcess>
#include <QRegExp>
@@ -88,7 +89,6 @@
#include <QtConcurrentRun>
#include <QTemporaryFile>
#include <QTextCodec>
#include <QTimer>
#include <QtPlugin>
#include <QUrl>
#include <QUuid>
@@ -642,11 +642,11 @@ void ClearCasePlugin::addCurrentFile()
vcsAdd(state.currentFileTopLevel(), state.relativeCurrentFile());
}
void ClearCasePlugin::setStatus(const QString &file, ClearCase::Internal::FileStatus::Status status, bool update)
void ClearCasePlugin::setStatus(const QString &file, FileStatus::Status status, bool update)
{
m_statusMap->insert(file, FileStatus(status, QFileInfo(currentState().topLevel(), file).permissions()));
if (update && (currentState().relativeCurrentFile() == file))
updateStatusActions();
QMetaObject::invokeMethod(this, "updateStatusActions");
}
void ClearCasePlugin::undoCheckOutCurrent()
@@ -1940,8 +1940,6 @@ void ClearCasePlugin::sync(QFutureInterface<void> &future, QString topLevel, QSt
ClearCasePlugin *plugin = ClearCasePlugin::instance();
ClearCaseSync ccSync(plugin, plugin->m_statusMap);
connect(&ccSync, SIGNAL(updateStreamAndView()), plugin, SLOT(updateStreamAndView()));
connect(&ccSync, SIGNAL(setStatus(QString, ClearCase::Internal::FileStatus::Status, bool)),
plugin, SLOT(setStatus(QString, ClearCase::Internal::FileStatus::Status, bool)));
ccSync.run(future, topLevel, files);
}