diff --git a/ApplicationCode/Application/RiaApplication.cpp b/ApplicationCode/Application/RiaApplication.cpp index c1795f5d82..579c574fba 100644 --- a/ApplicationCode/Application/RiaApplication.cpp +++ b/ApplicationCode/Application/RiaApplication.cpp @@ -356,6 +356,10 @@ bool RiaApplication::loadProject(const QString& projectFileName) m_commandQueue.push_back(m_project->commandObjects[i]); } + // Lock the command queue + m_commandQueueLock.lock(); + + // Execute command objects, and release the mutex when the queue is empty executeCommandObjects(); onProjectOpenedOrClosed(); @@ -1374,6 +1378,14 @@ void RiaApplication::runRegressionTest(const QString& testRootPath) if (testCaseFolder.exists(regTestProjectName)) { loadProject(testCaseFolder.filePath(regTestProjectName)); + + // Wait until all command objects have completed + while (!m_commandQueueLock.tryLock()) + { + processEvents(); + } + m_commandQueueLock.unlock(); + saveSnapshotForAllViews(generatedFolderName); QDir baseDir(testCaseFolder.filePath(baseFolderName)); @@ -1716,5 +1728,10 @@ void RiaApplication::executeCommandObjects() m_commandQueue.pop_front(); } + else + { + // Unlock the command queue lock when the command queue is empty + m_commandQueueLock.unlock(); + } } diff --git a/ApplicationCode/Application/RiaApplication.h b/ApplicationCode/Application/RiaApplication.h index ecc12cc2fb..cb6a484c4f 100644 --- a/ApplicationCode/Application/RiaApplication.h +++ b/ApplicationCode/Application/RiaApplication.h @@ -19,6 +19,8 @@ #pragma once #include #include +#include + #include "cafPdmObject.h" #include "cafPdmField.h" #include "cvfBase.h" @@ -174,4 +176,5 @@ private: QMap m_sessionCache; // Session cache used to store username/passwords per session std::list m_commandQueue; + QMutex m_commandQueueLock; };