From e074bae4b74bc02aeebb7437fbae12a55bdad0c1 Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 29 Jan 2016 15:47:48 +0300 Subject: [PATCH] Avoid MED file reading failure caused by low memory Failure reason: system(...) command exits with "Cannot allocate memory" --- src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx | 18 +++++++++--------- src/MEDWrapper/Factory/MED_Factory.cxx | 8 +++++--- src/SMESH/SMESH_Mesh.cxx | 4 ++++ src/SMESH_SWIG/smeshBuilder.py | 4 +++- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx b/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx index 74c3e6da8..58f9c0ca0 100644 --- a/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx +++ b/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx @@ -172,7 +172,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform() //------------------------------------------------------ PNodeInfo aNodeInfo = aMed->GetPNodeInfo(aMeshInfo); if (!aNodeInfo) { - aResult = DRS_FAIL; + aResult = addMessage("No nodes", /*isFatal=*/true ); continue; } aMeshInfo->myDim=aMeshInfo->mySpaceDim;// ignore meshdim in MEDFile because it can be false @@ -365,9 +365,9 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform() } #ifndef _DEXCEPT_ } catch(const std::exception& exc) { - aResult = DRS_FAIL; + aResult = addMessage( exc.what(), /*isFatal=*/true ); } catch (...) { - aResult = DRS_FAIL; + aResult = addMessage( "Unknown exception", /*isFatal=*/true ); } #endif if ( !anElement ) { @@ -522,10 +522,10 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform() #ifndef _DEXCEPT_ }catch(const std::exception& exc){ INFOS("Following exception was caught:\n\t"< +#include #include #include @@ -53,7 +54,7 @@ namespace MED #ifndef WIN32 if (access(theFileName.c_str(),F_OK)) return aVersion; - if(theDoPreCheckInSeparateProcess){ + if ( theDoPreCheckInSeparateProcess ) { // First check, is it possible to deal with the file std::ostringstream aStr; // File name is in quotes for the case of space(s) inside it (PAL13009) @@ -64,8 +65,9 @@ namespace MED std::string aCommand = aStr.str(); int aStatus = system(aCommand.c_str()); - BEGMSG(MYDEBUG,"aCommand = '"<NbFaces() = "<<_myMeshDS->NbFaces()); MESSAGE("MEDToMesh - _myMeshDS->NbVolumes() = "<<_myMeshDS->NbVolumes()); } +#ifdef _DEBUG_ + SMESH_ComputeErrorPtr er = myReader.GetError(); + if ( er && !er->IsOK() ) cout << er->myComment << endl; +#endif // Reading groups (sub-meshes are out of scope of MED import functionality) list aGroupNames = myReader.GetGroupNamesAndTypes(); diff --git a/src/SMESH_SWIG/smeshBuilder.py b/src/SMESH_SWIG/smeshBuilder.py index 0dc3b25f0..2c98e1653 100644 --- a/src/SMESH_SWIG/smeshBuilder.py +++ b/src/SMESH_SWIG/smeshBuilder.py @@ -1424,8 +1424,10 @@ class Mesh: # Treat compute errors computeErrors = self.smeshpyD.GetComputeErrors( self.mesh, geom ) + shapeText = "" for err in computeErrors: - shapeText = " on %s" % self.GetSubShapeName( err.subShapeID ) + if self.mesh.HasShapeToMesh(): + shapeText = " on %s" % self.GetSubShapeName( err.subShapeID ) errText = "" stdErrors = ["OK", #COMPERR_OK "Invalid input mesh", #COMPERR_BAD_INPUT_MESH -- 2.39.2