@@ -392,7 +392,7 @@ bool QgsGdalProvider::cacheGdalHandlesForLaterReuse( QgsGdalProvider *provider,
392
392
{
393
393
mgDatasetCacheSize --;
394
394
DatasetPair pair = mgDatasetCache[ candidateProvider ].takeLast ();
395
- if ( pair.mGdalBaseDataset )
395
+ if ( pair.mGdalBaseDataset != pair. mGdalDataset )
396
396
{
397
397
GDALDereferenceDataset ( pair.mGdalBaseDataset );
398
398
}
@@ -435,7 +435,7 @@ void QgsGdalProvider::closeCachedGdalHandlesFor( QgsGdalProvider *provider )
435
435
{
436
436
mgDatasetCacheSize --;
437
437
DatasetPair pair = iter.value ().takeLast ();
438
- if ( pair.mGdalBaseDataset )
438
+ if ( pair.mGdalBaseDataset != pair. mGdalDataset )
439
439
{
440
440
GDALDereferenceDataset ( pair.mGdalBaseDataset );
441
441
}
@@ -464,7 +464,7 @@ QgsGdalProvider::~QgsGdalProvider()
464
464
}
465
465
else
466
466
{
467
- if ( mGdalBaseDataset )
467
+ if ( mGdalBaseDataset != mGdalDataset )
468
468
{
469
469
GDALDereferenceDataset ( mGdalBaseDataset );
470
470
}
@@ -490,7 +490,6 @@ QgsGdalProvider::~QgsGdalProvider()
490
490
}
491
491
492
492
493
- // This was used by raster layer to reload data
494
493
void QgsGdalProvider::closeDataset ()
495
494
{
496
495
if ( !mValid )
@@ -499,11 +498,16 @@ void QgsGdalProvider::closeDataset()
499
498
}
500
499
mValid = false ;
501
500
502
- GDALDereferenceDataset ( mGdalBaseDataset );
501
+ if ( mGdalBaseDataset != mGdalDataset )
502
+ {
503
+ GDALDereferenceDataset ( mGdalBaseDataset );
504
+ }
503
505
mGdalBaseDataset = nullptr ;
504
506
505
507
GDALClose ( mGdalDataset );
506
508
mGdalDataset = nullptr ;
509
+
510
+ closeCachedGdalHandlesFor ( this );
507
511
}
508
512
509
513
QString QgsGdalProvider::htmlMetadata ()
@@ -2605,7 +2609,6 @@ void QgsGdalProvider::initBaseDataset()
2605
2609
{
2606
2610
QgsLogger::warning ( QStringLiteral ( " Warped VRT Creation failed." ) );
2607
2611
mGdalDataset = mGdalBaseDataset ;
2608
- GDALReferenceDataset ( mGdalDataset );
2609
2612
}
2610
2613
else
2611
2614
{
@@ -2615,7 +2618,6 @@ void QgsGdalProvider::initBaseDataset()
2615
2618
else
2616
2619
{
2617
2620
mGdalDataset = mGdalBaseDataset ;
2618
- GDALReferenceDataset ( mGdalDataset );
2619
2621
}
2620
2622
2621
2623
if ( !hasGeoTransform )
@@ -2644,12 +2646,7 @@ void QgsGdalProvider::initBaseDataset()
2644
2646
{
2645
2647
appendError ( ERRMSG ( tr ( " Cannot get GDAL raster band: %1" ).arg ( msg ) ) );
2646
2648
2647
- GDALDereferenceDataset ( mGdalBaseDataset );
2648
- mGdalBaseDataset = nullptr ;
2649
-
2650
- GDALClose ( mGdalDataset );
2651
- mGdalDataset = nullptr ;
2652
- mValid = false ;
2649
+ closeDataset ();
2653
2650
return ;
2654
2651
}
2655
2652
// if there are subdatasets, leave the dataset open for subsequent queries
@@ -2956,8 +2953,7 @@ bool QgsGdalProvider::remove()
2956
2953
if ( mGdalDataset )
2957
2954
{
2958
2955
GDALDriverH driver = GDALGetDatasetDriver ( mGdalDataset );
2959
- GDALClose ( mGdalDataset );
2960
- mGdalDataset = nullptr ;
2956
+ closeDataset ();
2961
2957
2962
2958
CPLErrorReset ();
2963
2959
CPLErr err = GDALDeleteDataset ( driver, dataSourceUri ( true ).toUtf8 ().constData () );
0 commit comments