Insure canvas rendering jobs are cancelled when exiting QGIS

This commit is contained in:
nirvn 2018-04-04 15:35:33 +07:00 committed by Mathieu Pellerin
parent 282a999ba8
commit 1b9f41d03d
2 changed files with 16 additions and 2 deletions

View File

@ -1362,8 +1362,6 @@ QgisApp::QgisApp()
QgisApp::~QgisApp()
{
stopRendering();
delete mInternalClipboard;
delete mQgisInterface;
delete mStyleSheetBuilder;
@ -1452,6 +1450,12 @@ QgisApp::~QgisApp()
qDeleteAll( mCustomDropHandlers );
qDeleteAll( mCustomLayoutDropHandlers );
const QList<QgsMapCanvas *> canvases = mapCanvases();
for ( QgsMapCanvas *canvas : canvases )
{
delete canvas;
}
// This function *MUST* be the last one called, as it destroys in
// particular GDAL. As above objects can hold GDAL/OGR objects, it is not
// safe destroying them afterwards

View File

@ -211,6 +211,16 @@ QgsMapCanvas::~QgsMapCanvas()
delete mJob;
}
QList< QgsMapRendererQImageJob * >::const_iterator previewJob = mPreviewJobs.constBegin();
for ( ; previewJob != mPreviewJobs.constEnd(); ++previewJob )
{
if ( *previewJob )
{
whileBlocking( *previewJob )->cancel();
delete *previewJob;
}
}
// delete canvas items prior to deleting the canvas
// because they might try to update canvas when it's
// already being destructed, ends with segfault