diff --git a/src/providers/wfs/qgswfsfeatureiterator.cpp b/src/providers/wfs/qgswfsfeatureiterator.cpp index c4c4cda22b53..62020a0e53f3 100644 --- a/src/providers/wfs/qgswfsfeatureiterator.cpp +++ b/src/providers/wfs/qgswfsfeatureiterator.cpp @@ -12,6 +12,12 @@ QgsWFSFeatureIterator::QgsWFSFeatureIterator( QgsWFSProvider* provider, const Qg return; } + if ( mProvider->mActiveIterator ) + { + mProvider->mActiveIterator->close(); + } + mProvider->mActiveIterator = this; + switch ( request.filterType() ) { case QgsFeatureRequest::FilterRect: @@ -67,5 +73,11 @@ bool QgsWFSFeatureIterator::rewind() bool QgsWFSFeatureIterator::close() { - return false; + if ( !mProvider ) + { + return false; + } + mProvider->mActiveIterator = 0; + mProvider = 0; + return true; } diff --git a/src/providers/wfs/qgswfsprovider.cpp b/src/providers/wfs/qgswfsprovider.cpp index 562e85955806..4ce7338e40ed 100644 --- a/src/providers/wfs/qgswfsprovider.cpp +++ b/src/providers/wfs/qgswfsprovider.cpp @@ -50,6 +50,7 @@ static const QString GML_NAMESPACE = "http://www.opengis.net/gml"; QgsWFSProvider::QgsWFSProvider( const QString& uri ) : QgsVectorDataProvider( uri ), mNetworkRequestFinished( true ), + mActiveIterator( 0 ), mRequestEncoding( QgsWFSProvider::GET ), mUseIntersect( false ), mWKBType( QGis::WKBUnknown ), @@ -123,6 +124,10 @@ QgsWFSProvider::~QgsWFSProvider() { deleteData(); delete mSpatialIndex; + if ( mActiveIterator ) + { + mActiveIterator->close(); + } } void QgsWFSProvider::reloadData()