mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-02 00:04:02 -05:00
Fix race
This commit is contained in:
parent
7dec3050f6
commit
ced5910bc8
@ -48,11 +48,14 @@ specified ``uri``.
|
|||||||
Returns the sublayer details as calculated by the task.
|
Returns the sublayer details as calculated by the task.
|
||||||
%End
|
%End
|
||||||
|
|
||||||
virtual bool run();
|
|
||||||
|
|
||||||
virtual void cancel();
|
virtual void cancel();
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
virtual bool run();
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
|
|||||||
@ -19,6 +19,7 @@
|
|||||||
#include "qgsfeedback.h"
|
#include "qgsfeedback.h"
|
||||||
#include "qgsproviderregistry.h"
|
#include "qgsproviderregistry.h"
|
||||||
#include "qgsprovidersublayerdetails.h"
|
#include "qgsprovidersublayerdetails.h"
|
||||||
|
#include "qgsreadwritelocker.h"
|
||||||
|
|
||||||
QgsProviderSublayerTask::QgsProviderSublayerTask( const QString &uri )
|
QgsProviderSublayerTask::QgsProviderSublayerTask( const QString &uri )
|
||||||
: QgsTask( tr( "Retrieving layers" ), QgsTask::CanCancel | QgsTask::CancelWithoutPrompt )
|
: QgsTask( tr( "Retrieving layers" ), QgsTask::CanCancel | QgsTask::CancelWithoutPrompt )
|
||||||
@ -28,6 +29,7 @@ QgsProviderSublayerTask::QgsProviderSublayerTask( const QString &uri )
|
|||||||
|
|
||||||
QList<QgsProviderSublayerDetails> QgsProviderSublayerTask::results() const
|
QList<QgsProviderSublayerDetails> QgsProviderSublayerTask::results() const
|
||||||
{
|
{
|
||||||
|
QgsReadWriteLocker locker( mLock, QgsReadWriteLocker::Read );
|
||||||
return mResults;
|
return mResults;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,7 +39,11 @@ bool QgsProviderSublayerTask::run()
|
|||||||
{
|
{
|
||||||
mFeedback = std::make_unique< QgsFeedback >();
|
mFeedback = std::make_unique< QgsFeedback >();
|
||||||
|
|
||||||
mResults = QgsProviderRegistry::instance()->querySublayers( mUri, Qgis::SublayerQueryFlag::ResolveGeometryType | Qgis::SublayerQueryFlag::CountFeatures, mFeedback.get() );
|
const QList<QgsProviderSublayerDetails> res = QgsProviderRegistry::instance()->querySublayers( mUri, Qgis::SublayerQueryFlag::ResolveGeometryType | Qgis::SublayerQueryFlag::CountFeatures, mFeedback.get() );
|
||||||
|
|
||||||
|
QgsReadWriteLocker locker( mLock, QgsReadWriteLocker::Write );
|
||||||
|
mResults = res;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -19,6 +19,7 @@
|
|||||||
#define QGSPROVIDERSUBLAYERTASKTASK_H
|
#define QGSPROVIDERSUBLAYERTASKTASK_H
|
||||||
|
|
||||||
#include "qgstaskmanager.h"
|
#include "qgstaskmanager.h"
|
||||||
|
#include <QReadWriteLock>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
class QgsFeedback;
|
class QgsFeedback;
|
||||||
@ -61,9 +62,12 @@ class CORE_EXPORT QgsProviderSublayerTask : public QgsTask
|
|||||||
*/
|
*/
|
||||||
QList<QgsProviderSublayerDetails> results() const;
|
QList<QgsProviderSublayerDetails> results() const;
|
||||||
|
|
||||||
bool run() override;
|
|
||||||
void cancel() override;
|
void cancel() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
bool run() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
QString mUri;
|
QString mUri;
|
||||||
@ -72,6 +76,8 @@ class CORE_EXPORT QgsProviderSublayerTask : public QgsTask
|
|||||||
|
|
||||||
QList<QgsProviderSublayerDetails> mResults;
|
QList<QgsProviderSublayerDetails> mResults;
|
||||||
|
|
||||||
|
mutable QReadWriteLock mLock;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // QGSPROVIDERSUBLAYERTASKTASK_H
|
#endif // QGSPROVIDERSUBLAYERTASKTASK_H
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user