Salome HOME
Fix crash at study closing. Enable canceling Prism 3D computation
authoreap <eap@opencascade.com>
Tue, 22 Jul 2014 14:57:36 +0000 (18:57 +0400)
committereap <eap@opencascade.com>
Tue, 22 Jul 2014 14:57:36 +0000 (18:57 +0400)
src/SMESHDS/SMESHDS_TSubMeshHolder.hxx
src/StdMeshers/StdMeshers_Prism_3D.cxx

index b6fa226..52c9eb2 100644 (file)
@@ -74,12 +74,20 @@ public:
   void DeleteAll()
   {
     for ( size_t i = 0; i < myVec.size(); ++i )
   void DeleteAll()
   {
     for ( size_t i = 0; i < myVec.size(); ++i )
-      delete myVec[i];
+      if ( SUBMESH* sm = myVec[i] )
+      {
+        myVec[i] = 0; // avoid access via Get(i)
+        delete sm;
+      }
     myVec.clear();
 
     typename std::map< int, SUBMESH* >::iterator i2sm = myMap.begin();
     for ( ; i2sm != myMap.end(); ++i2sm )
     myVec.clear();
 
     typename std::map< int, SUBMESH* >::iterator i2sm = myMap.begin();
     for ( ; i2sm != myMap.end(); ++i2sm )
-      delete i2sm->second;
+      if ( SUBMESH* sm = i2sm->second )
+      {
+        i2sm->second = 0; // avoid access via Get(i)
+        delete sm;
+      }
     myMap.clear();
   }
   int GetMinID() const
     myMap.clear();
   }
   int GetMinID() const
index 99fdbe9..afac9be 100644 (file)
@@ -1203,6 +1203,9 @@ bool StdMeshers_Prism_3D::compute(const Prism_3D::TPrismTopo& thePrism)
         // create a node
         node = meshDS->AddNode( coords.X(), coords.Y(), coords.Z() );
         meshDS->SetNodeInVolume( node, volumeID );
         // create a node
         node = meshDS->AddNode( coords.X(), coords.Y(), coords.Z() );
         meshDS->SetNodeInVolume( node, volumeID );
+
+        if ( _computeCanceled )
+          return false;
       }
     } // loop on bottom nodes
   }
       }
     } // loop on bottom nodes
   }