Salome HOME
PAL16774,PAL16631(SALOME crash after a mesh computation that failed because of lack...
authoreap <eap@opencascade.com>
Mon, 10 Sep 2007 14:20:09 +0000 (14:20 +0000)
committereap <eap@opencascade.com>
Mon, 10 Sep 2007 14:20:09 +0000 (14:20 +0000)
1)
-  void Update( int theIsClear = true );
+  bool Update( int theIsClear = true );
2) Do not catch here

src/OBJECT/SMESH_Object.cxx

index 6957422696cc79f10ba071d5bdd7f70c15751f8c..181de551c57b2be243c3925d0ad16e0c70f8c232 100644 (file)
@@ -199,8 +199,10 @@ void SMESH_VisualObjDef::createPoints( vtkPoints* thePoints )
 //=================================================================================
 void SMESH_VisualObjDef::buildPrs()
 {
-  try
-  {
+  // PAL16631(crash after a mesh computation that failed because of lack of memory):
+  // Catch exceptions upper by stack
+//   try 
+//   {
     mySMDS2VTKNodes.clear();
     myVTK2SMDSNodes.clear();
     mySMDS2VTKElems.clear();
@@ -210,15 +212,15 @@ void SMESH_VisualObjDef::buildPrs()
       buildNodePrs();
     else
       buildElemPrs();
-  }
-  catch( const std::exception& exc )
-  {
-    INFOS("Follow exception was cought:\n\t"<<exc.what());
-  }
-  catch(...)
-  {
-    INFOS("Unknown exception was cought !!!");
-  }
+//   }
+//   catch( const std::exception& exc )
+//   {
+//     INFOS("Follow exception was cought:\n\t"<<exc.what());
+//   }
+//   catch(...)
+//   {
+//     INFOS("Unknown exception was cought !!!");
+//   }
   
   if( MYDEBUG ) MESSAGE( "Update - myGrid->GetNumberOfCells() = "<<myGrid->GetNumberOfCells() );
   if( MYDEBUGWITHFILES ) SMESH::WriteUnstructuredGrid( myGrid,"/tmp/buildPrs" );
@@ -516,11 +518,14 @@ SMESH_MeshObj::~SMESH_MeshObj()
 // function : Update
 // purpose  : Update mesh and fill grid with new values if necessary 
 //=================================================================================
-void SMESH_MeshObj::Update( int theIsClear )
+bool SMESH_MeshObj::Update( int theIsClear )
 {
   // Update SMDS_Mesh on client part
-  if ( myClient.Update(theIsClear) )
+  if ( myClient.Update(theIsClear) || GetUnstructuredGrid()->GetNumberOfPoints()==0) {
     buildPrs();  // Fill unstructured grid
+    return true;
+  }
+  return false;
 }
 
 //=================================================================================
@@ -675,10 +680,11 @@ void SMESH_SubMeshObj::UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunc
 // function : Update
 // purpose  : Update mesh object and fill grid with new values 
 //=================================================================================
-void SMESH_SubMeshObj::Update( int theIsClear )
+bool SMESH_SubMeshObj::Update( int theIsClear )
 {
-  myMeshObj->Update( theIsClear );
+  bool changed = myMeshObj->Update( theIsClear );
   buildPrs();
+  return changed;
 }