Skip to content

Commit 17e6afc

Browse files
committed
Clean up memory
1 parent 4786279 commit 17e6afc

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

src/core/raster/qgspalettedrasterrenderer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,5 @@ void QgsPalettedRasterRenderer::draw( QPainter* p, QgsRasterViewPort* viewPort,
8888
p->drawImage( tlPoint, img );
8989
}
9090
}
91+
stopRasterRead( mBandNumber );
9192
}

src/core/raster/qgsrasterrenderer.cpp

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ QgsRasterRenderer::QgsRasterRenderer( QgsRasterDataProvider* provider, QgsRaster
2525

2626
QgsRasterRenderer::~QgsRasterRenderer()
2727
{
28+
//remove remaining memory in partinfos
29+
QMap<int, RasterPartInfo>::iterator partIt = mRasterPartInfos.begin();
30+
for ( ; partIt != mRasterPartInfos.end(); ++partIt )
31+
{
32+
CPLFree( partIt.value().data );
33+
}
2834
}
2935

3036
void QgsRasterRenderer::startRasterRead( int bandNumber, QgsRasterViewPort* viewPort, const QgsMapToPixel* mapToPixel, double& oversampling )
@@ -35,6 +41,9 @@ void QgsRasterRenderer::startRasterRead( int bandNumber, QgsRasterViewPort* view
3541
return;
3642
}
3743

44+
//remove any previous part on that band
45+
removePartInfo( bandNumber );
46+
3847
//calculate oversampling factor
3948
if ( mResampler )
4049
{
@@ -53,7 +62,7 @@ void QgsRasterRenderer::startRasterRead( int bandNumber, QgsRasterViewPort* view
5362
pInfo.nCols = viewPort->drawableAreaXDim * oversampling;
5463
pInfo.nRows = viewPort->drawableAreaYDim * oversampling;
5564
int totalMemoryUsage = pInfo.nCols * pInfo.nRows * mProvider->dataTypeSize( bandNumber );
56-
int parts = totalMemoryUsage / 100000000 /*10000*/ + 1;
65+
int parts = totalMemoryUsage / /*100000000*/ 100000 + 1;
5766
pInfo.nPartsPerDimension = sqrt( parts );
5867
pInfo.nColsPerPart = pInfo.nCols / pInfo.nPartsPerDimension;
5968
pInfo.nRowsPerPart = pInfo.nRows / pInfo.nPartsPerDimension;
@@ -124,4 +133,16 @@ bool QgsRasterRenderer::readNextRasterPart( int bandNumber, QgsRasterViewPort* v
124133

125134
void QgsRasterRenderer::stopRasterRead( int bandNumber )
126135
{
136+
removePartInfo( bandNumber );
137+
}
138+
139+
void QgsRasterRenderer::removePartInfo( int bandNumber )
140+
{
141+
QMap<int, RasterPartInfo>::iterator partIt = mRasterPartInfos.find( bandNumber );
142+
if ( partIt != mRasterPartInfos.end() )
143+
{
144+
RasterPartInfo& pInfo = partIt.value();
145+
CPLFree( pInfo.data );
146+
mRasterPartInfos.remove( bandNumber );
147+
}
127148
}

src/core/raster/qgsrasterrenderer.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ class QgsRasterRenderer
5656
QgsRasterDataProvider* mProvider;
5757
QgsRasterResampler* mResampler;
5858
QMap<int, RasterPartInfo> mRasterPartInfos;
59+
60+
private:
61+
/**Remove part into and release memory*/
62+
void removePartInfo( int bandNumer );
5963
};
6064

6165
inline double QgsRasterRenderer::readValue( void *data, QgsRasterDataProvider::DataType type, int index )

0 commit comments

Comments
 (0)