From e848f45eaaeafaf91c9a77c7379cb357dac13f0c Mon Sep 17 00:00:00 2001 From: eap Date: Mon, 24 Sep 2007 12:49:24 +0000 Subject: [PATCH] + SMDS_Mesh::CheckMemory(); // PAL16631 --- src/OBJECT/SMESH_Object.cxx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/OBJECT/SMESH_Object.cxx b/src/OBJECT/SMESH_Object.cxx index 181de551c..0dbbc68af 100644 --- a/src/OBJECT/SMESH_Object.cxx +++ b/src/OBJECT/SMESH_Object.cxx @@ -232,8 +232,12 @@ void SMESH_VisualObjDef::buildPrs() //================================================================================= void SMESH_VisualObjDef::buildNodePrs() { + // PAL16631: without swap, bad_alloc is not thrown but hung up and crash instead, + // so check remaining memory size for safety + SMDS_Mesh::CheckMemory(); // PAL16631 vtkPoints* aPoints = vtkPoints::New(); createPoints( aPoints ); + SMDS_Mesh::CheckMemory(); myGrid->SetPoints( aPoints ); aPoints->Delete(); @@ -293,6 +297,10 @@ void SMESH_VisualObjDef::buildElemPrs() for ( int i = 0; i <= 2; i++ ) nbEnts[ aTypes[ i ] ] = GetEntities( aTypes[ i ], anEnts[ aTypes[ i ] ] ); + // PAL16631: without swap, bad_alloc is not thrown but hung up and crash instead, + // so check remaining memory size for safety + SMDS_Mesh::CheckMemory(); // PAL16631 + vtkIdType aCellsSize = 3 * nbEnts[ SMDSAbs_Edge ]; for ( int i = 1; i <= 2; i++ ) // iterate through faces and volumes @@ -316,16 +324,22 @@ void SMESH_VisualObjDef::buildElemPrs() vtkCellArray* aConnectivity = vtkCellArray::New(); aConnectivity->Allocate( aCellsSize, 0 ); + SMDS_Mesh::CheckMemory(); // PAL16631 + vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); aCellTypesArray->SetNumberOfComponents( 1 ); aCellTypesArray->Allocate( aNbCells * aCellTypesArray->GetNumberOfComponents() ); + SMDS_Mesh::CheckMemory(); // PAL16631 + vtkIdList *anIdList = vtkIdList::New(); vtkIdType iElem = 0; TConnect aConnect; aConnect.reserve(VTK_CELL_SIZE); + SMDS_Mesh::CheckMemory(); // PAL16631 + for ( int i = 0; i <= 2; i++ ) // iterate through edges, faces and volumes { if( nbEnts[ aTypes[ i ] ] > 0 ) @@ -426,6 +440,7 @@ void SMESH_VisualObjDef::buildElemPrs() iElem++; } } + SMDS_Mesh::CheckMemory(); // PAL16631 } // Insert cells in grid @@ -434,6 +449,8 @@ void SMESH_VisualObjDef::buildElemPrs() aCellLocationsArray->SetNumberOfComponents( 1 ); aCellLocationsArray->SetNumberOfTuples( aNbCells ); + SMDS_Mesh::CheckMemory(); // PAL16631 + aConnectivity->InitTraversal(); for( vtkIdType idType = 0, *pts, npts; aConnectivity->GetNextCell( npts, pts ); idType++ ) aCellLocationsArray->SetValue( idType, aConnectivity->GetTraversalLocation( npts ) ); @@ -444,6 +461,8 @@ void SMESH_VisualObjDef::buildElemPrs() aCellTypesArray->Delete(); aConnectivity->Delete(); anIdList->Delete(); + + SMDS_Mesh::CheckMemory(); // PAL16631 } //================================================================================= -- 2.39.2