diff options
Diffstat (limited to 'TAO/CIAO/DAnCE/ciao/Servant_Impl_T.cpp')
-rw-r--r-- | TAO/CIAO/DAnCE/ciao/Servant_Impl_T.cpp | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/TAO/CIAO/DAnCE/ciao/Servant_Impl_T.cpp b/TAO/CIAO/DAnCE/ciao/Servant_Impl_T.cpp index 8805a78d271..2277645ae55 100644 --- a/TAO/CIAO/DAnCE/ciao/Servant_Impl_T.cpp +++ b/TAO/CIAO/DAnCE/ciao/Servant_Impl_T.cpp @@ -18,6 +18,9 @@ namespace CIAO Session_Container * c ) : Servant_Impl_Base (home, home_servant, c), + activated_ (0), + pre_activated_ (0), + post_activated_ (0), executor_ (EXEC::_duplicate (exe)) { } @@ -172,7 +175,11 @@ namespace CIAO if (! ::CORBA::is_nil (temp.in ())) { - temp->ciao_preactivate (ACE_ENV_SINGLE_ARG_PARAMETER); + if (this->pre_activated_ == 0) + { + this->pre_activated_ = 1; + temp->ciao_preactivate (ACE_ENV_SINGLE_ARG_PARAMETER); + } } } @@ -194,7 +201,11 @@ namespace CIAO if (! ::CORBA::is_nil (temp.in ())) { - temp->ccm_activate (ACE_ENV_SINGLE_ARG_PARAMETER); + if (this->activated_ == 0) + { + this->activated_ = 1; + temp->ccm_activate (ACE_ENV_SINGLE_ARG_PARAMETER); + } } } @@ -217,7 +228,11 @@ namespace CIAO if (! ::CORBA::is_nil (temp.in ())) { - temp->ciao_postactivate (ACE_ENV_SINGLE_ARG_PARAMETER); + if (this->post_activated_ == 0) + { + this->post_activated_ = 1; + temp->ciao_postactivate (ACE_ENV_SINGLE_ARG_PARAMETER); + } } } @@ -225,6 +240,19 @@ namespace CIAO typename EXEC, typename EXEC_VAR, typename CONTEXT> + CORBA::Boolean + Servant_Impl<BASE_SKEL, EXEC, EXEC_VAR, CONTEXT>::is_activated ( + ACE_ENV_SINGLE_ARG_DECL + ) + ACE_THROW_SPEC ((CORBA::SystemException)) + { + return this->pre_activated_; + } + + template <typename BASE_SKEL, + typename EXEC, + typename EXEC_VAR, + typename CONTEXT> void Servant_Impl<BASE_SKEL, EXEC, EXEC_VAR, CONTEXT>::_ciao_passivate ( ACE_ENV_SINGLE_ARG_DECL |