From a453a47beadb762d9cc59b50172d6ff2c5a70263 Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 21 May 2014 14:30:17 +0400 Subject: [PATCH] 22594: [CEA 1159] Salome crashes when loading a dumped meshing script Avoid destruction on myHyp when it is unpublished --- .../StdMeshers_LayerDistribution_i.cxx | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/StdMeshers_I/StdMeshers_LayerDistribution_i.cxx b/src/StdMeshers_I/StdMeshers_LayerDistribution_i.cxx index bfdc32947..8128acd56 100644 --- a/src/StdMeshers_I/StdMeshers_LayerDistribution_i.cxx +++ b/src/StdMeshers_I/StdMeshers_LayerDistribution_i.cxx @@ -45,9 +45,9 @@ using namespace std; //============================================================================= StdMeshers_LayerDistribution_i::StdMeshers_LayerDistribution_i( PortableServer::POA_ptr thePOA, - int theStudyId, - ::SMESH_Gen* theGenImpl ) - : SALOME::GenericObj_i( thePOA ), + int theStudyId, + ::SMESH_Gen* theGenImpl ) + : SALOME::GenericObj_i( thePOA ), SMESH_Hypothesis_i( thePOA ) { MESSAGE( "StdMeshers_LayerDistribution_i::StdMeshers_LayerDistribution_i" ); @@ -67,18 +67,20 @@ StdMeshers_LayerDistribution_i::StdMeshers_LayerDistribution_i( PortableServer:: StdMeshers_LayerDistribution_i::~StdMeshers_LayerDistribution_i() { MESSAGE( "StdMeshers_LayerDistribution_i::~StdMeshers_LayerDistribution_i" ); + if ( !myHyp->_is_nil() ) + myHyp->UnRegister(); } //============================================================================= /*! * StdMeshers_LayerDistribution_i::SetLayerDistribution * - + */ //============================================================================= void StdMeshers_LayerDistribution_i::SetLayerDistribution(SMESH::SMESH_Hypothesis_ptr hyp1D) - throw ( SALOME::SALOME_Exception ) + throw ( SALOME::SALOME_Exception ) { ASSERT( myBaseImpl ); try { @@ -86,6 +88,7 @@ void StdMeshers_LayerDistribution_i::SetLayerDistribution(SMESH::SMESH_Hypothesi bool isNewHyp = ( hyp_i->GetImpl() != this->GetImpl()->GetLayerDistribution() ); this->GetImpl()->SetLayerDistribution( hyp_i->GetImpl() ); myHyp = SMESH::SMESH_Hypothesis::_duplicate( hyp1D ); + myHyp->Register(); // Remove SO of 1D hypothesis if it was published if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen()) { @@ -142,12 +145,13 @@ SMESH::SMESH_Hypothesis_ptr StdMeshers_LayerDistribution_i::GetLayerDistribution //================================================================================ /*! * \brief Verify whether hypothesis supports given entity type - * \param type - dimension (see SMESH::Dimension enumeration) - * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise + * \param type - dimension (see SMESH::Dimension enumeration) + * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise * * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration) */ //================================================================================ + CORBA::Boolean StdMeshers_LayerDistribution_i::IsDimSupported( SMESH::Dimension type ) { return type == SMESH::DIM_3D; @@ -156,7 +160,7 @@ CORBA::Boolean StdMeshers_LayerDistribution_i::IsDimSupported( SMESH::Dimension //================================================================================ /*! * \brief Write parameters in a string - * \retval char* - resulting string + * \retval char* - resulting string */ //================================================================================ @@ -182,7 +186,7 @@ char* StdMeshers_LayerDistribution_i::SaveTo() //================================================================================ /*! * \brief Retrieve parameters from the string - * \param theStream - the input string + * \param theStream - the input string */ //================================================================================ -- 2.30.2