diff options
author | jai <jai@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2004-11-23 00:29:19 +0000 |
---|---|---|
committer | jai <jai@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2004-11-23 00:29:19 +0000 |
commit | 5cc3250236b69377847d29b1808aed51ab2bc7fa (patch) | |
tree | df5189feb5cedd2cd600532445ac3aaee54d5e9c | |
parent | 52af092c19dc772fb4a827412a262f59beef1ecd (diff) | |
download | ATCD-5cc3250236b69377847d29b1808aed51ab2bc7fa.tar.gz |
*** empty log message ***
-rw-r--r-- | TAO/CIAO/DAnCE/ciao/Home_Servant_Impl_T.cpp | 40 | ||||
-rw-r--r-- | TAO/CIAO/DAnCE/ciao/Home_Servant_Impl_T.h | 6 | ||||
-rw-r--r-- | 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<PortableServer::ObjectId>, ACE_SYNCH_MUTEX> component_map_; + ACE_Hash_Map_Manager_Ex<PortableServer::ObjectId, + Components::CCMObject_ptr, + TAO_ObjectId_Hash, + ACE_Equal_To<PortableServer::ObjectId>, + 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 () |