diff options
Diffstat (limited to 'TAO/tao/ORBInitializer_Registry.cpp')
-rw-r--r-- | TAO/tao/ORBInitializer_Registry.cpp | 82 |
1 files changed, 49 insertions, 33 deletions
diff --git a/TAO/tao/ORBInitializer_Registry.cpp b/TAO/tao/ORBInitializer_Registry.cpp index 4a7aa25a200..286d3bd2362 100644 --- a/TAO/tao/ORBInitializer_Registry.cpp +++ b/TAO/tao/ORBInitializer_Registry.cpp @@ -7,6 +7,7 @@ #include "SystemException.h" #include "ace/Static_Object_Lock.h" +#include "ace/Recursive_Thread_Mutex.h" ACE_RCSID (tao, @@ -21,49 +22,56 @@ PortableInterceptor::register_orb_initializer ( PortableInterceptor::ORBInitializer_ptr init ACE_ENV_ARG_DECL) { - // Using ACE_Static_Object_Lock::instance() precludes - // <register_orb_initializer> from being called within a static - // object CTOR. - ACE_MT (ACE_GUARD (TAO_SYNCH_RECURSIVE_MUTEX, - guard, - *ACE_Static_Object_Lock::instance ())); - - // Make sure TAO's singleton manager is initialized. - if (TAO_Singleton_Manager::instance ()->init () == -1) - { - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) register_orb_initializer: ") - ACE_TEXT ("Unable to pre-initialize TAO\n"))); - } - - CORBA::ORB::init_orb_globals (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_CHECK; + { + // Using ACE_Static_Object_Lock::instance() precludes + // register_orb_initializer() from being called within a static + // object CTOR. + ACE_MT (ACE_GUARD (TAO_SYNCH_RECURSIVE_MUTEX, + guard, + *ACE_Static_Object_Lock::instance ())); + + // Make sure TAO's singleton manager is initialized. + if (TAO_Singleton_Manager::instance ()->init () == -1) + { + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("(%P|%t) register_orb_initializer: ") + ACE_TEXT ("Unable to pre-initialize TAO\n"))); + } + + TAO::ORB::init_orb_globals (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + } // Make sure the following is done after the global ORB // initialization since we need to have exceptions initialized. - TAO_ORBInitializer_Registry::instance ()->register_orb_initializer ( + TAO::ORBInitializer_Registry::instance ()->register_orb_initializer ( init ACE_ENV_ARG_PARAMETER); } // ------------------------------------------------------------------ -TAO_ORBInitializer_Registry::TAO_ORBInitializer_Registry (void) - : initializers_ () +TAO::ORBInitializer_Registry::ORBInitializer_Registry (void) + : lock_ (), + initializers_ () { } void -TAO_ORBInitializer_Registry::register_orb_initializer ( +TAO::ORBInitializer_Registry::register_orb_initializer ( PortableInterceptor::ORBInitializer_ptr init ACE_ENV_ARG_DECL) { if (!CORBA::is_nil (init)) { + ACE_GUARD (TAO_SYNCH_MUTEX, + guard, + this->lock_); + // Increase the length of the ORBInitializer array by one. - const size_t cur_len = this->initializers_.size (); - const size_t new_len = cur_len + 1; + size_t const cur_len = this->initializers_.size (); + size_t const new_len = cur_len + 1; if (this->initializers_.size (new_len) != 0) ACE_THROW (CORBA::INTERNAL ()); @@ -80,11 +88,15 @@ TAO_ORBInitializer_Registry::register_orb_initializer ( } void -TAO_ORBInitializer_Registry::pre_init ( +TAO::ORBInitializer_Registry::pre_init ( PortableInterceptor::ORBInitInfo_ptr info ACE_ENV_ARG_DECL) { - const size_t initializer_count = this->initializers_.size (); + ACE_GUARD (TAO_SYNCH_MUTEX, + guard, + this->lock_); + + size_t const initializer_count (this->initializers_.size ()); for (size_t i = 0; i < initializer_count; ++i) { this->initializers_[i]->pre_init (info @@ -94,11 +106,15 @@ TAO_ORBInitializer_Registry::pre_init ( } void -TAO_ORBInitializer_Registry::post_init ( +TAO::ORBInitializer_Registry::post_init ( PortableInterceptor::ORBInitInfo_ptr info ACE_ENV_ARG_DECL) { - const size_t initializer_count = this->initializers_.size (); + ACE_GUARD (TAO_SYNCH_MUTEX, + guard, + this->lock_); + + size_t const initializer_count (this->initializers_.size ()); for (size_t i = 0; i < initializer_count; ++i) { this->initializers_[i]->post_init (info @@ -107,25 +123,25 @@ TAO_ORBInitializer_Registry::post_init ( } } -TAO_ORBInitializer_Registry * -TAO_ORBInitializer_Registry::instance (void) +TAO::ORBInitializer_Registry * +TAO::ORBInitializer_Registry::instance (void) { return - TAO_Singleton<TAO_ORBInitializer_Registry, TAO_SYNCH_MUTEX>::instance (); + TAO_Singleton<TAO::ORBInitializer_Registry, TAO_SYNCH_MUTEX>::instance (); } #if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) -template class TAO_Singleton<TAO_ORBInitializer_Registry, TAO_SYNCH_MUTEX>; +template class TAO_Singleton<TAO::ORBInitializer_Registry, TAO_SYNCH_MUTEX>; template class ACE_Array_Base<PortableInterceptor::ORBInitializer_var>; #elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) -#pragma instantiate TAO_Singleton<TAO_ORBInitializer_Registry, TAO_SYNCH_MUTEX> +#pragma instantiate TAO_Singleton<TAO::ORBInitializer_Registry, TAO_SYNCH_MUTEX> #pragma instantiate ACE_Array_Base<PortableInterceptor::ORBInitializer_var> #elif defined (ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION) -template TAO_Singleton<TAO_ORBInitializer_Registry, TAO_SYNCH_MUTEX> * TAO_Singleton<TAO_ORBInitializer_Registry, TAO_SYNCH_MUTEX>::singleton_; +template TAO_Singleton<TAO::ORBInitializer_Registry, TAO_SYNCH_MUTEX> * TAO_Singleton<TAO::ORBInitializer_Registry, TAO_SYNCH_MUTEX>::singleton_; #endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ |