summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjai <jai@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2004-11-23 00:29:19 +0000
committerjai <jai@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2004-11-23 00:29:19 +0000
commit5cc3250236b69377847d29b1808aed51ab2bc7fa (patch)
treedf5189feb5cedd2cd600532445ac3aaee54d5e9c
parent52af092c19dc772fb4a827412a262f59beef1ecd (diff)
downloadATCD-5cc3250236b69377847d29b1808aed51ab2bc7fa.tar.gz
*** empty log message ***
-rw-r--r--TAO/CIAO/DAnCE/ciao/Home_Servant_Impl_T.cpp40
-rw-r--r--TAO/CIAO/DAnCE/ciao/Home_Servant_Impl_T.h6
-rw-r--r--TAO/CIAO/DAnCE/ciao/Servant_Impl_Base.cpp1
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 ()