From 5daa546f6feaa77cfb44895fc16d2b230be23cbe Mon Sep 17 00:00:00 2001 From: rldhont Date: Thu, 23 Jun 2016 14:49:13 +0200 Subject: [PATCH] [BUGFIX] QgsMapLayerRegistry: Check layers before removed Probably fixed #15088 Segmentation fault when using layersRemoved SIGNAL --- src/core/qgsmaplayerregistry.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/core/qgsmaplayerregistry.cpp b/src/core/qgsmaplayerregistry.cpp index 2f7f49a07489..8e386bb9f2f5 100644 --- a/src/core/qgsmaplayerregistry.cpp +++ b/src/core/qgsmaplayerregistry.cpp @@ -131,21 +131,23 @@ void QgsMapLayerRegistry::removeMapLayers( const QList& layers ) return; QStringList layerIds; + QList layerList; Q_FOREACH ( QgsMapLayer* layer, layers ) { - if ( layer ) + // check layer and the registry contains it + if ( layer && mMapLayers.contains( layer->id() ) ) + { layerIds << layer->id(); + layerList << layer; + } } emit layersWillBeRemoved( layerIds ); - emit layersWillBeRemoved( layers ); + emit layersWillBeRemoved( layerList ); - Q_FOREACH ( QgsMapLayer* lyr, layers ) + Q_FOREACH ( QgsMapLayer* lyr, layerList ) { - if ( !lyr ) - continue; - QString myId( lyr->id() ); emit layerWillBeRemoved( myId ); emit layerWillBeRemoved( lyr );