Salome HOME
IPAL54527: SIGSEGV after group removal
[modules/smesh.git] / src / SMESHDS / SMESHDS_GroupOnFilter.cxx
index e5b2fb736bd3d75362f0f6aae9a85343fc3cf8bf..7e1c79097bef9e8f2403827c60f1cc487df50aa7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2019  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -147,6 +147,7 @@ namespace // Iterator
     size_t                            myNbToFind, myNbFound, myTotalNb;
     vector< const SMDS_MeshElement*>& myFoundElems;
     bool &                            myFoundElemsOK;
+    bool                              myFoundElemsChecked;
 
     TIterator( const SMESH_PredicatePtr&         filter,
                SMDS_ElemIteratorPtr&             elems,
@@ -161,14 +162,15 @@ namespace // Iterator
       myNbFound( 0 ),
       myTotalNb( totalNb ),
       myFoundElems( foundElems ),
-      myFoundElemsOK( foundElemsOK )
+      myFoundElemsOK( foundElemsOK ),
+      myFoundElemsChecked( false )
     {
       myFoundElemsOK = false;
       next();
     }
     ~TIterator()
     {
-      if ( !myFoundElemsOK )
+      if ( !myFoundElemsChecked && !myFoundElemsOK )
         clearVector( myFoundElems );
     }
     virtual bool more()
@@ -225,6 +227,8 @@ namespace // Iterator
       }
       if ( !myFoundElemsOK )
         clearVector( myFoundElems );
+
+      myFoundElemsChecked = true; // in destructor: not to clearVector() which may already die
     }
   };