From 5cc3250236b69377847d29b1808aed51ab2bc7fa Mon Sep 17 00:00:00 2001 From: jai Date: Tue, 23 Nov 2004 00:29:19 +0000 Subject: *** empty log message *** --- TAO/CIAO/DAnCE/ciao/Home_Servant_Impl_T.cpp | 40 ++++++++++++++++++++++------- TAO/CIAO/DAnCE/ciao/Home_Servant_Impl_T.h | 6 +++++ TAO/CIAO/DAnCE/ciao/Servant_Impl_Base.cpp | 1 + 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/TAO/CIAO/DAnCE/ciao/Home_Servant_Impl_T.cpp b/TAO/CIAO/DAnCE/ciao/Home_Servant_Impl_T.cpp index e12d589655d..8e094d0894e 100644 --- a/TAO/CIAO/DAnCE/ciao/Home_Servant_Impl_T.cpp +++ b/TAO/CIAO/DAnCE/ciao/Home_Servant_Impl_T.cpp @@ -75,20 +75,34 @@ namespace CIAO ACE_THROW_SPEC ((CORBA::SystemException, Components::RemoveFailure)) { - COMP_VAR _ciao_comp = COMP::_narrow (comp - ACE_ENV_ARG_PARAMETER); + PortableServer::ObjectId_var oid = + this->container_->the_POA ()->reference_to_id (comp + ACE_ENV_ARG_PARAMETER); ACE_CHECK; - if (CORBA::is_nil (_ciao_comp.in ())) + Components::CCMObject_var ccm_obj_ptr; + COMP_SVNT *servant = 0; + + if (objref_map_.unbind (oid.in (), ccm_obj_ptr) == 0) { - ACE_THROW (CORBA::INTERNAL ()); - } + COMP_VAR _ciao_comp = COMP::_narrow (ccm_obj_ptr + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + if (CORBA::is_nil (_ciao_comp.in ())) + { + ACE_THROW (CORBA::INTERNAL ()); + } + _ciao_comp->remove (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; - _ciao_comp->remove (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; + if (component_map_.unbind (oid.in (), servant) == 0) + { + PortableServer::ServantBase_var safe (servant); + servant->_ciao_passivate (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + } + } - this->_ciao_passivate_component (_ciao_comp.in () - ACE_ENV_ARG_PARAMETER); } // Operations for keyless home interface. @@ -215,6 +229,14 @@ namespace CIAO ACE_ENV_ARG_PARAMETER); ACE_CHECK_RETURN (COMP::_nil ()); + Components::CCMObject_var ccmobjref = + Components::CCMObject::_narrow (objref.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (Components::CCMObject::_nil ()); + + this->objref_map_.bind (oid.in (), + Components::CCMObject::_duplicate (ccmobjref.in ())); + if (this->component_map_.bind (oid.in (), svt) == 0) { safe._retn (); diff --git a/TAO/CIAO/DAnCE/ciao/Home_Servant_Impl_T.h b/TAO/CIAO/DAnCE/ciao/Home_Servant_Impl_T.h index 8ff3e858990..02b7d9ac84e 100644 --- a/TAO/CIAO/DAnCE/ciao/Home_Servant_Impl_T.h +++ b/TAO/CIAO/DAnCE/ciao/Home_Servant_Impl_T.h @@ -103,6 +103,12 @@ namespace CIAO ACE_Equal_To, ACE_SYNCH_MUTEX> component_map_; + ACE_Hash_Map_Manager_Ex, + ACE_SYNCH_MUTEX> + objref_map_; }; } diff --git a/TAO/CIAO/DAnCE/ciao/Servant_Impl_Base.cpp b/TAO/CIAO/DAnCE/ciao/Servant_Impl_Base.cpp index b37b07b124c..6b63ff21788 100644 --- a/TAO/CIAO/DAnCE/ciao/Servant_Impl_Base.cpp +++ b/TAO/CIAO/DAnCE/ciao/Servant_Impl_Base.cpp @@ -61,6 +61,7 @@ namespace CIAO ACE_THROW_SPEC ((CORBA::SystemException, Components::RemoveFailure)) { + CORBA::Object_var objref = this->container_->get_objref (this); Components::CCMObject_var ccmobjref = Components::CCMObject::_narrow (objref.in () -- cgit v1.2.1