Skip to content

Commit 0e89a3a

Browse files
committed
Use QgsReadWriteLocker
1 parent ba5cfc3 commit 0e89a3a

File tree

1 file changed

+10
-12
lines changed

1 file changed

+10
-12
lines changed

src/analysis/vector/geometry_checker/qgsfeaturepool.cpp

+10-12
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@
2121
#include "qgsvectorlayer.h"
2222
#include "qgsvectordataprovider.h"
2323
#include "qgsvectorlayerutils.h"
24+
#include "qgsreadwritelocker.h"
2425

2526
#include <QMutexLocker>
2627

28+
2729
QgsFeaturePool::QgsFeaturePool( QgsVectorLayer *layer, double layerToMapUnits, const QgsCoordinateTransform &layerToMapTransform )
2830
: mFeatureCache( CACHE_SIZE )
2931
, mLayer( layer )
@@ -37,7 +39,7 @@ QgsFeaturePool::QgsFeaturePool( QgsVectorLayer *layer, double layerToMapUnits, c
3739

3840
bool QgsFeaturePool::get( QgsFeatureId id, QgsFeature &feature )
3941
{
40-
mCacheLock.lockForRead();
42+
QgsReadWriteLocker locker( mCacheLock, QgsReadWriteLocker::Read );
4143
QgsFeature *cachedFeature = mFeatureCache.object( id );
4244
if ( cachedFeature )
4345
{
@@ -54,11 +56,9 @@ bool QgsFeaturePool::get( QgsFeatureId id, QgsFeature &feature )
5456
{
5557
return false;
5658
}
57-
mCacheLock.unlock();
58-
mCacheLock.lockForWrite();
59+
locker.changeMode( QgsReadWriteLocker::Write );
5960
mFeatureCache.insert( id, new QgsFeature( feature ) );
6061
}
61-
mCacheLock.unlock();
6262
return true;
6363
}
6464

@@ -69,9 +69,8 @@ QgsFeatureIds QgsFeaturePool::getFeatureIds() const
6969

7070
QgsFeatureIds QgsFeaturePool::getIntersects( const QgsRectangle &rect ) const
7171
{
72-
mIndexLock.lockForRead();
72+
QgsReadWriteLocker locker( mIndexLock, QgsReadWriteLocker::Read );
7373
QgsFeatureIds ids = QgsFeatureIds::fromList( mIndex.intersects( rect ) );
74-
mIndexLock.unlock();
7574
return ids;
7675
}
7776

@@ -84,32 +83,31 @@ QgsVectorLayer *QgsFeaturePool::layer() const
8483

8584
void QgsFeaturePool::insertFeature( const QgsFeature &feature )
8685
{
87-
mCacheLock.lockForWrite();
86+
QgsReadWriteLocker locker( mIndexLock, QgsReadWriteLocker::Write );
8887
mFeatureCache.insert( feature.id(), new QgsFeature( feature ) );
8988
mIndex.insertFeature( feature );
90-
mCacheLock.unlock();
9189
}
9290

9391
void QgsFeaturePool::changeFeature( const QgsFeature &feature )
9492
{
95-
mCacheLock.lockForWrite();
93+
QgsReadWriteLocker locker( mIndexLock, QgsReadWriteLocker::Write );
9694
mFeatureCache.remove( feature.id() );
9795
mFeatureCache.insert( feature.id(), new QgsFeature( feature ) );
9896
mIndex.deleteFeature( feature );
9997
mIndex.insertFeature( feature );
100-
mCacheLock.unlock();
10198
}
10299

103100
void QgsFeaturePool::removeFeature( const QgsFeatureId featureId )
104101
{
105102
QgsFeature origFeature;
106-
mCacheLock.lockForWrite();
103+
QgsReadWriteLocker locker( mIndexLock, QgsReadWriteLocker::Unlocked );
107104
if ( get( featureId, origFeature ) )
108105
{
106+
locker.changeMode( QgsReadWriteLocker::Write );
109107
mIndex.deleteFeature( origFeature );
110108
}
109+
locker.changeMode( QgsReadWriteLocker::Write );
111110
mFeatureCache.remove( origFeature.id() );
112-
mCacheLock.unlock();
113111
}
114112

115113
void QgsFeaturePool::setFeatureIds( const QgsFeatureIds &ids )

0 commit comments

Comments
 (0)