diff --git a/src/core/qgstaskmanager.cpp b/src/core/qgstaskmanager.cpp index 61d536513cd..7e1627676a9 100644 --- a/src/core/qgstaskmanager.cpp +++ b/src/core/qgstaskmanager.cpp @@ -29,6 +29,7 @@ QgsTask::QgsTask( const QString &name, Flags flags ) : mFlags( flags ) , mDescription( name ) { + mNotStartedMutex.lock(); } QgsTask::~QgsTask() @@ -41,6 +42,7 @@ QgsTask::~QgsTask() delete subTask.task; } mNotFinishedMutex.unlock(); + mNotStartedMutex.unlock(); } void QgsTask::setDescription( const QString &description ) @@ -55,6 +57,7 @@ qint64 QgsTask::elapsedTime() const void QgsTask::start() { + mNotStartedMutex.unlock(); mNotFinishedMutex.lock(); mStartCount++; Q_ASSERT( mStartCount == 1 ); @@ -152,6 +155,9 @@ QList QgsTask::dependentLayers() const bool QgsTask::waitForFinished( int timeout ) { + // We wait the task to be started + mNotStartedMutex.lock(); + bool rv = true; if ( mOverallStatus == Complete || mOverallStatus == Terminated ) { diff --git a/src/core/qgstaskmanager.h b/src/core/qgstaskmanager.h index 6e7a72674e1..e71bbe89fb0 100644 --- a/src/core/qgstaskmanager.h +++ b/src/core/qgstaskmanager.h @@ -310,6 +310,7 @@ class CORE_EXPORT QgsTask : public QObject * it's used as a trigger for waitForFinished. */ QMutex mNotFinishedMutex; + QMutex mNotStartedMutex; //! Progress of this (parent) task alone double mProgress = 0.0;