+ SMDS_Mesh::CheckMemory(); // PAL16631

This commit is contained in:
eap 2007-09-24 13:52:57 +00:00
parent f6615d7074
commit 8c740710a0
2 changed files with 21 additions and 1 deletions

View File

@ -232,8 +232,12 @@ void SMESH_VisualObjDef::buildPrs()
//================================================================================= //=================================================================================
void SMESH_VisualObjDef::buildNodePrs() 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(); vtkPoints* aPoints = vtkPoints::New();
createPoints( aPoints ); createPoints( aPoints );
SMDS_Mesh::CheckMemory();
myGrid->SetPoints( aPoints ); myGrid->SetPoints( aPoints );
aPoints->Delete(); aPoints->Delete();
@ -293,6 +297,10 @@ void SMESH_VisualObjDef::buildElemPrs()
for ( int i = 0; i <= 2; i++ ) for ( int i = 0; i <= 2; i++ )
nbEnts[ aTypes[ i ] ] = GetEntities( aTypes[ i ], anEnts[ aTypes[ 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 ]; vtkIdType aCellsSize = 3 * nbEnts[ SMDSAbs_Edge ];
for ( int i = 1; i <= 2; i++ ) // iterate through faces and volumes for ( int i = 1; i <= 2; i++ ) // iterate through faces and volumes
@ -316,16 +324,22 @@ void SMESH_VisualObjDef::buildElemPrs()
vtkCellArray* aConnectivity = vtkCellArray::New(); vtkCellArray* aConnectivity = vtkCellArray::New();
aConnectivity->Allocate( aCellsSize, 0 ); aConnectivity->Allocate( aCellsSize, 0 );
SMDS_Mesh::CheckMemory(); // PAL16631
vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New(); vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New();
aCellTypesArray->SetNumberOfComponents( 1 ); aCellTypesArray->SetNumberOfComponents( 1 );
aCellTypesArray->Allocate( aNbCells * aCellTypesArray->GetNumberOfComponents() ); aCellTypesArray->Allocate( aNbCells * aCellTypesArray->GetNumberOfComponents() );
SMDS_Mesh::CheckMemory(); // PAL16631
vtkIdList *anIdList = vtkIdList::New(); vtkIdList *anIdList = vtkIdList::New();
vtkIdType iElem = 0; vtkIdType iElem = 0;
TConnect aConnect; TConnect aConnect;
aConnect.reserve(VTK_CELL_SIZE); aConnect.reserve(VTK_CELL_SIZE);
SMDS_Mesh::CheckMemory(); // PAL16631
for ( int i = 0; i <= 2; i++ ) // iterate through edges, faces and volumes for ( int i = 0; i <= 2; i++ ) // iterate through edges, faces and volumes
{ {
if( nbEnts[ aTypes[ i ] ] > 0 ) if( nbEnts[ aTypes[ i ] ] > 0 )
@ -426,6 +440,7 @@ void SMESH_VisualObjDef::buildElemPrs()
iElem++; iElem++;
} }
} }
SMDS_Mesh::CheckMemory(); // PAL16631
} }
// Insert cells in grid // Insert cells in grid
@ -434,6 +449,8 @@ void SMESH_VisualObjDef::buildElemPrs()
aCellLocationsArray->SetNumberOfComponents( 1 ); aCellLocationsArray->SetNumberOfComponents( 1 );
aCellLocationsArray->SetNumberOfTuples( aNbCells ); aCellLocationsArray->SetNumberOfTuples( aNbCells );
SMDS_Mesh::CheckMemory(); // PAL16631
aConnectivity->InitTraversal(); aConnectivity->InitTraversal();
for( vtkIdType idType = 0, *pts, npts; aConnectivity->GetNextCell( npts, pts ); idType++ ) for( vtkIdType idType = 0, *pts, npts; aConnectivity->GetNextCell( npts, pts ); idType++ )
aCellLocationsArray->SetValue( idType, aConnectivity->GetTraversalLocation( npts ) ); aCellLocationsArray->SetValue( idType, aConnectivity->GetTraversalLocation( npts ) );
@ -444,6 +461,8 @@ void SMESH_VisualObjDef::buildElemPrs()
aCellTypesArray->Delete(); aCellTypesArray->Delete();
aConnectivity->Delete(); aConnectivity->Delete();
anIdList->Delete(); anIdList->Delete();
SMDS_Mesh::CheckMemory(); // PAL16631
} }
//================================================================================= //=================================================================================

View File

@ -1315,8 +1315,9 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS; OCC_CATCH_SIGNALS;
#endif #endif
MemoryReserve aMemoryReserve;
algo->InitComputeError(); algo->InitComputeError();
MemoryReserve aMemoryReserve;
SMDS_Mesh::CheckMemory();
if ( !_father->HasShapeToMesh() ) // no shape if ( !_father->HasShapeToMesh() ) // no shape
{ {
SMESH_MesherHelper helper( *_father ); SMESH_MesherHelper helper( *_father );