diff options
author | irfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-07-25 07:23:51 +0000 |
---|---|---|
committer | irfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-07-25 07:23:51 +0000 |
commit | 24f20357f46d0564c79018236ef0d4b32df3838d (patch) | |
tree | 0b4e64baad0b99fc6e994af99b9c2f69a18cc799 | |
parent | d82d13f7c6d9f54cae8540099565724bc16124c8 (diff) | |
download | ATCD-24f20357f46d0564c79018236ef0d4b32df3838d.tar.gz |
Thread Pool changes....
22 files changed, 476 insertions, 295 deletions
diff --git a/TAO/tao/Default_Thread_Lane_Resources_Manager.cpp b/TAO/tao/Default_Thread_Lane_Resources_Manager.cpp new file mode 100644 index 00000000000..20b7d690cca --- /dev/null +++ b/TAO/tao/Default_Thread_Lane_Resources_Manager.cpp @@ -0,0 +1,90 @@ +// $Id$ + +#include "tao/Default_Thread_Lane_Resources_Manager.h" + +ACE_RCSID(tao, Default_Thread_Lane_Resources_Manager, "$Id$") + +#include "tao/ORB_Core.h" +#include "tao/Acceptor_Registry.h" +#include "tao/Thread_Lane_Resources.h" +#include "tao/Leader_Follower.h" + +#if !defined (__ACE_INLINE__) +# include "tao/Default_Thread_Lane_Resources_Manager.i" +#endif /* ! __ACE_INLINE__ */ + +TAO_Default_Thread_Lane_Resources_Manager::TAO_Default_Thread_Lane_Resources_Manager (void) + : open_called_ (0), + lane_resources_ (0), + orb_core_ (0) +{ +} + +TAO_Default_Thread_Lane_Resources_Manager::~TAO_Default_Thread_Lane_Resources_Manager (void) +{ +} + +int +TAO_Default_Thread_Lane_Resources_Manager::initialize (TAO_ORB_Core &orb_core) +{ + this->orb_core_ = + &orb_core; + + ACE_NEW_RETURN (this->lane_resources_, + TAO_Thread_Lane_Resources (orb_core), + -1); + + return 0; +} + +int +TAO_Default_Thread_Lane_Resources_Manager::open_default_resources (CORBA_Environment &ACE_TRY_ENV) +{ + // Double check pattern + if (this->open_called_ == 1) + return 1; + + ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, tao_mon, this->open_lock_, -1); + + if (this->open_called_ == 1) + return 1; + + TAO_Acceptor_Registry &ar = + this->lane_resources_->acceptor_registry (); + // get a reference to the acceptor_registry! + + int ret = + ar.open (this->orb_core_, + this->lane_resources_->leader_follower ().reactor (), + ACE_TRY_ENV); + ACE_CHECK_RETURN (-1); + + if (ret == -1) + return -1; + + this->open_called_ = 1; + + return 0; +} + +void +TAO_Default_Thread_Lane_Resources_Manager::finalize (void) +{ + this->lane_resources_->finalize (); + delete this->lane_resources_; + this->lane_resources_ = 0; +} + +TAO_Thread_Lane_Resources & +TAO_Default_Thread_Lane_Resources_Manager::lane_resources (void) +{ + return *this->lane_resources_; +} + +ACE_STATIC_SVC_DEFINE (TAO_Default_Thread_Lane_Resources_Manager, + ACE_TEXT ("Default_Thread_Lane_Resources_Manager"), + ACE_SVC_OBJ_T, + &ACE_SVC_NAME (TAO_Default_Thread_Lane_Resources_Manager), + ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ, + 0) +ACE_FACTORY_DEFINE (TAO, TAO_Default_Thread_Lane_Resources_Manager) diff --git a/TAO/tao/Default_Thread_Lane_Resources_Manager.h b/TAO/tao/Default_Thread_Lane_Resources_Manager.h new file mode 100644 index 00000000000..97cc3a7a92f --- /dev/null +++ b/TAO/tao/Default_Thread_Lane_Resources_Manager.h @@ -0,0 +1,67 @@ +//============================================================================= +/** + * @file Default_Thread_Lane_Resources_Manager.h + * + * $Id$ + * + * @author Irfan Pyarali + */ +// =================================================================== + +#ifndef TAO_DEFAULT_THREAD_LANE_RESOURCES_MANAGER_H +#define TAO_DEFAULT_THREAD_LANE_RESOURCES_MANAGER_H + +#include "ace/pre.h" +#include "tao/orbconf.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "tao/Thread_Lane_Resources_Manager.h" +#include "ace/Service_Config.h" + +/** + * @class TAO_Default_Thread_Lane_Resources_Manager + * + * @brief Simple manager for thread lane resources. + * + * \nosubgrouping + * + **/ +class TAO_Export TAO_Default_Thread_Lane_Resources_Manager : + public TAO_Thread_Lane_Resources_Manager +{ +public: + TAO_Default_Thread_Lane_Resources_Manager (void); + ~TAO_Default_Thread_Lane_Resources_Manager (void); + + int initialize (TAO_ORB_Core &orb_core); + void finalize (void); + + int open_default_resources (CORBA_Environment &ACE_TRY_ENV); + + TAO_Thread_Lane_Resources &lane_resources (void); + + /// Mutual exclusion for calling open. + TAO_SYNCH_MUTEX open_lock_; + + /// Flag which denotes that the open method was called. + int open_called_; + + TAO_Thread_Lane_Resources *lane_resources_; + + /// ORB_Core related to this thread lane. + TAO_ORB_Core *orb_core_; +}; + +ACE_STATIC_SVC_DECLARE_EXPORT (TAO, TAO_Default_Thread_Lane_Resources_Manager) +ACE_FACTORY_DECLARE (TAO, TAO_Default_Thread_Lane_Resources_Manager) + +#if defined (__ACE_INLINE__) +# include "tao/Default_Thread_Lane_Resources_Manager.i" +#endif /* __ACE_INLINE__ */ + +#include "ace/post.h" + +#endif /* TAO_DEFAULT_THREAD_LANE_RESOURCES_MANAGER_H */ diff --git a/TAO/tao/Default_Thread_Lane_Resources_Manager.i b/TAO/tao/Default_Thread_Lane_Resources_Manager.i new file mode 100644 index 00000000000..cfa1da318d3 --- /dev/null +++ b/TAO/tao/Default_Thread_Lane_Resources_Manager.i @@ -0,0 +1 @@ +// $Id$ diff --git a/TAO/tao/ORB_Core.cpp b/TAO/tao/ORB_Core.cpp index 8708041785a..54240e83e37 100644 --- a/TAO/tao/ORB_Core.cpp +++ b/TAO/tao/ORB_Core.cpp @@ -31,6 +31,7 @@ #include "BiDir_Adapter.h" #include "tao/Thread_Lane_Resources.h" +#include "tao/Thread_Lane_Resources_Manager.h" #include "Default_Stub_Factory.h" #include "Default_Endpoint_Selector_Factory.h" #include "Default_Protocols_Hooks.h" @@ -1141,8 +1142,7 @@ TAO_ORB_Core::fini (void) } // Finalize lane resources. - this->thread_lane_resources_manager ()->finalize (); - delete this->thread_lane_resources_manager_; + this->thread_lane_resources_manager ().finalize (); // Pass reactor back to the resource factory. if (this->resource_factory_ != 0) @@ -1311,12 +1311,12 @@ TAO_ORB_Core::resource_factory (void) return this->resource_factory_; } -TAO_Thread_Lane_Resources_Manager * +TAO_Thread_Lane_Resources_Manager & TAO_ORB_Core::thread_lane_resources_manager (void) { // Check if there is a cached reference. if (this->thread_lane_resources_manager_ != 0) - return this->thread_lane_resources_manager_; + return *this->thread_lane_resources_manager_; // If not, look in the service repository for an instance. this->thread_lane_resources_manager_ = @@ -1326,7 +1326,7 @@ TAO_ORB_Core::thread_lane_resources_manager (void) // Initialize the resources. this->thread_lane_resources_manager_->initialize (*this); - return this->thread_lane_resources_manager_; + return *this->thread_lane_resources_manager_; } TAO_Stub_Factory * @@ -2013,15 +2013,6 @@ TAO_ORB_Core::run (ACE_Time_Value *tv, ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("TAO (%P|%t) - start of run/perform_work\n"))); - // This method should only be called by servers, so now we set up - // for listening! - - int ret = this->open (ACE_TRY_ENV); - ACE_CHECK_RETURN (-1); - - if (ret == -1) - return -1; - // Fetch the Reactor ACE_Reactor *r = this->reactor (); @@ -2220,18 +2211,10 @@ TAO_ORB_Core::destroy_interceptors (CORBA::Environment &ACE_TRY_ENV) } } -// Set up listening endpoints. -int -TAO_ORB_Core::open (CORBA::Environment &ACE_TRY_ENV) -{ - // Open lane resources. - return this->thread_lane_resources_manager ()->open (ACE_TRY_ENV); -} - TAO_Thread_Lane_Resources & TAO_ORB_Core::lane_resources (void) { - return this->thread_lane_resources_manager ()->lane_resources (); + return this->thread_lane_resources_manager ().lane_resources (); } void diff --git a/TAO/tao/ORB_Core.h b/TAO/tao/ORB_Core.h index 1b705fef473..0a0f4737973 100644 --- a/TAO/tao/ORB_Core.h +++ b/TAO/tao/ORB_Core.h @@ -398,7 +398,7 @@ public: TAO_Protocols_Hooks *protocols_hooks (void); /// Returns a pointer to the Thread Lane Resources Manager. - TAO_Thread_Lane_Resources_Manager *thread_lane_resources_manager (void); + TAO_Thread_Lane_Resources_Manager &thread_lane_resources_manager (void); /// Returns a pointer to the Stub factory. TAO_Stub_Factory *stub_factory (void); @@ -872,11 +872,6 @@ public: TAO_IORInterceptor_List::TYPE & ior_interceptors (void); //@} - /// Set up the ORB Core's acceptor to listen on the - /// previously-specified port for requests. Returns -1 on failure, - /// otherwise 0. - int open (CORBA::Environment &ACE_TRY_ENV); - /// Call the bidir_giop library to parse the policy. int parse_bidir_policy (CORBA::Policy_ptr policy, CORBA::Environment &ACE_TRY_ENV); diff --git a/TAO/tao/PortableServer/Default_Policy_Validator.cpp b/TAO/tao/PortableServer/Default_Policy_Validator.cpp index c60a04fe2aa..52d45adbd4a 100644 --- a/TAO/tao/PortableServer/Default_Policy_Validator.cpp +++ b/TAO/tao/PortableServer/Default_Policy_Validator.cpp @@ -7,10 +7,14 @@ ACE_RCSID(tao, POA, "$Id$") -TAO_POA_Default_Policy_Validator::~TAO_POA_Default_Policy_Validator (void) +TAO_POA_Default_Policy_Validator::TAO_POA_Default_Policy_Validator (TAO_ORB_Core &orb_core) + : TAO_POA_Policy_Validator (orb_core) { } +TAO_POA_Default_Policy_Validator::~TAO_POA_Default_Policy_Validator (void) +{ +} void TAO_POA_Default_Policy_Validator::validate_impl (TAO_Policy_Set &policies, @@ -52,7 +56,7 @@ TAO_POA_Default_Policy_Validator::validate_impl (TAO_Policy_Set &policies, policy = policies.get_cached_policy (TAO_CACHED_POLICY_ID_UNIQUENESS); PortableServer::IdUniquenessPolicy_var iup = PortableServer::IdUniquenessPolicy::_narrow (policy.in (), - ACE_TRY_ENV); + ACE_TRY_ENV); ACE_CHECK; PortableServer::IdUniquenessPolicyValue id_uniqueness = iup->value (ACE_TRY_ENV); @@ -71,7 +75,7 @@ TAO_POA_Default_Policy_Validator::validate_impl (TAO_Policy_Set &policies, policy = policies.get_cached_policy (TAO_CACHED_POLICY_ID_ASSIGNMENT); PortableServer::IdAssignmentPolicy_var idap = PortableServer::IdAssignmentPolicy::_narrow (policy.in (), - ACE_TRY_ENV); + ACE_TRY_ENV); ACE_CHECK; PortableServer::IdAssignmentPolicyValue id_assignment = idap->value (ACE_TRY_ENV); diff --git a/TAO/tao/PortableServer/Default_Policy_Validator.h b/TAO/tao/PortableServer/Default_Policy_Validator.h index ef1a260b7ce..0c534bfeef8 100644 --- a/TAO/tao/PortableServer/Default_Policy_Validator.h +++ b/TAO/tao/PortableServer/Default_Policy_Validator.h @@ -26,6 +26,10 @@ class TAO_PortableServer_Export TAO_POA_Default_Policy_Validator : public TAO_POA_Policy_Validator { public: + + /// Constructor. + TAO_POA_Default_Policy_Validator (TAO_ORB_Core &orb_core); + /// Destructor. ~TAO_POA_Default_Policy_Validator (void); @@ -50,5 +54,3 @@ protected: #include "ace/post.h" #endif /* TAO_DEFAULT_POLICY_VALIDATOR_H_ */ - - diff --git a/TAO/tao/PortableServer/Object_Adapter.cpp b/TAO/tao/PortableServer/Object_Adapter.cpp index 768c5279d01..a5bb502bd89 100644 --- a/TAO/tao/PortableServer/Object_Adapter.cpp +++ b/TAO/tao/PortableServer/Object_Adapter.cpp @@ -123,6 +123,7 @@ TAO_Object_Adapter::TAO_Object_Adapter (const TAO_Server_Strategy_Factory::Activ non_servant_upcall_in_progress_ (0), non_servant_upcall_thread_ (ACE_OS::NULL_thread), root_ (0), + default_validator_ (orb_core), default_poa_policies_ () { TAO_Object_Adapter::set_transient_poa_name_size (creation_parameters); diff --git a/TAO/tao/PortableServer/POA.cpp b/TAO/tao/PortableServer/POA.cpp index ba095af2f96..267bfedd234 100644 --- a/TAO/tao/PortableServer/POA.cpp +++ b/TAO/tao/PortableServer/POA.cpp @@ -16,6 +16,7 @@ #include "tao/Server_Strategy_Factory.h" #include "tao/Acceptor_Registry.h" #include "tao/Thread_Lane_Resources.h" +#include "tao/Thread_Lane_Resources_Manager.h" #include "tao/Environment.h" #include "tao/Exception.h" #include "tao/Stub.h" @@ -385,6 +386,20 @@ TAO_POA::create_POA_i (const char *adapter_name, ACE_TRY_ENV); ACE_CHECK_RETURN (PortableServer::POA::_nil ()); + // Check to see if the user has specfied a thread pool policy. + CORBA::Policy_var policy = + tao_policies.get_cached_policy (TAO_CACHED_POLICY_THREADPOOL); + + // If a thread pool policy was specified, then this POA will be run + // by an RT thread pool. Resources for RT threads pools are opened + // during the creation of the thread pool. + // + // However, if the thread pool was not specified, this POA will be + // run by the default thread pool. Therefore, we have to make sure + // that the resources for the default thread pool are open. + if (CORBA::is_nil (policy.in ())) + this->orb_core_.thread_lane_resources_manager ().open_default_resources (ACE_TRY_ENV); + ACE_CHECK_RETURN (PortableServer::POA::_nil ()); // If any of the policy objects specified are not valid for the ORB // implementation, if conflicting policy objects are specified, or @@ -3232,9 +3247,6 @@ TAO_POA::key_to_stub_i (const TAO_ObjectKey &key, CORBA::Short priority, CORBA_Environment &ACE_TRY_ENV) { - (void) this->orb_core_.open (ACE_TRY_ENV); - ACE_CHECK_RETURN (0); - CORBA::PolicyList_var client_exposed_policies = this->client_exposed_policies (priority, ACE_TRY_ENV); diff --git a/TAO/tao/PortableServer/Policy_Validator.cpp b/TAO/tao/PortableServer/Policy_Validator.cpp index 6b64139659e..596de7f2454 100644 --- a/TAO/tao/PortableServer/Policy_Validator.cpp +++ b/TAO/tao/PortableServer/Policy_Validator.cpp @@ -2,13 +2,15 @@ #include "Policy_Validator.h" #include "tao/Environment.h" +#include "tao/ORB_Core.h" ACE_RCSID(tao, POA, "$Id$") TAO_POA_Policy_Validator *TAO_POA_Policy_Validator::last_ = 0; -TAO_POA_Policy_Validator::TAO_POA_Policy_Validator (void) - : next_ (0) +TAO_POA_Policy_Validator::TAO_POA_Policy_Validator (TAO_ORB_Core &orb_core) + : orb_core_ (orb_core), + next_ (0) { // No-Op. } @@ -48,5 +50,3 @@ TAO_POA_Policy_Validator::legal_policy (CORBA::PolicyType type) return (this->legal_policy_impl (type) || ((this->next_ != 0) && this->next_->legal_policy_impl (type))); } - - diff --git a/TAO/tao/PortableServer/Policy_Validator.h b/TAO/tao/PortableServer/Policy_Validator.h index 328dc251cc9..78b61bad571 100644 --- a/TAO/tao/PortableServer/Policy_Validator.h +++ b/TAO/tao/PortableServer/Policy_Validator.h @@ -26,12 +26,13 @@ // Forward declarations. class TAO_Policy_Set; +class TAO_ORB_Core; class TAO_PortableServer_Export TAO_POA_Policy_Validator { public: /// Constructor. - TAO_POA_Policy_Validator (void); + TAO_POA_Policy_Validator (TAO_ORB_Core &orb_core); /// Destructor. virtual ~TAO_POA_Policy_Validator (void); @@ -68,6 +69,8 @@ protected: virtual CORBA::Boolean legal_policy_impl (CORBA::PolicyType type) = 0; + TAO_ORB_Core &orb_core_; + private: TAO_POA_Policy_Validator *next_; static TAO_POA_Policy_Validator *last_; @@ -75,5 +78,3 @@ private: #include "ace/post.h" #endif /* TAO_POLICY_VALIDATOR_H_ */ - - diff --git a/TAO/tao/RTCORBA/RT_Thread_Lane_Resources_Manager.cpp b/TAO/tao/RTCORBA/RT_Thread_Lane_Resources_Manager.cpp new file mode 100644 index 00000000000..08c36e5254c --- /dev/null +++ b/TAO/tao/RTCORBA/RT_Thread_Lane_Resources_Manager.cpp @@ -0,0 +1,102 @@ +// $Id$ + +#include "tao/Default_Thread_Lane_Resources_Manager.h" + +ACE_RCSID(tao, Default_Thread_Lane_Resources_Manager, "$Id$") + +#include "tao/ORB_Core.h" +#include "tao/Acceptor_Registry.h" +#include "tao/Thread_Lane_Resources.h" +#include "tao/Thread_Pool.h" +#include "tao/Leader_Follower.h" + +#if !defined (__ACE_INLINE__) +# include "tao/Default_Thread_Lane_Resources_Manager.i" +#endif /* ! __ACE_INLINE__ */ + +TAO_RT_Thread_Lane_Resources_Manager::TAO_RT_Thread_Lane_Resources_Manager (void) + : open_called_ (0), + default_lane_resources_ (0), + orb_core_ (0) +{ +} + +TAO_RT_Thread_Lane_Resources_Manager::~TAO_RT_Thread_Lane_Resources_Manager (void) +{ + delete this->default_lane_resources_; +} + +int +TAO_RT_Thread_Lane_Resources_Manager::initialize (TAO_ORB_Core &orb_core) +{ + this->orb_core_ = + &orb_core; + + ACE_NEW_RETURN (this->default_lane_resources_, + TAO_Thread_Lane_Resources (orb_core), + -1); + + return 0; +} + +int +TAO_RT_Thread_Lane_Resources_Manager::open_default_resources (CORBA_Environment &ACE_TRY_ENV) +{ + // Check if we have been already opened. + if (this->open_called_ == 1) + return 1; + + // Double check pattern + ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, tao_mon, this->open_lock_, -1); + + if (this->open_called_ == 1) + return 1; + + TAO_Acceptor_Registry &ar = + this->default_lane_resources_->acceptor_registry (); + // get a reference to the acceptor_registry! + + int ret = + ar.open (this->orb_core_, + this->default_lane_resources_->leader_follower ().reactor (), + ACE_TRY_ENV); + ACE_CHECK_RETURN (-1); + + if (ret == -1) + return -1; + + this->open_called_ = 1; + + return 0; +} + +void +TAO_RT_Thread_Lane_Resources_Manager::finalize (void) +{ + this->default_lane_resources_->finalize (); +} + +TAO_Thread_Lane_Resources & +TAO_RT_Thread_Lane_Resources_Manager::lane_resources (void) +{ + /// Get the ORB_Core's TSS resources. + TAO_ORB_Core_TSS_Resources &tss = + *this->orb_core_->get_tss_resources (); + + /// Get the lane for this thread. + TAO_Thread_Lane *lane = + (TAO_Thread_Lane *) tss.lane_; + + if (lane) + return lane->resources (); + else + return *this->default_lane_resources_; +} + +ACE_STATIC_SVC_DEFINE (TAO_RT_Thread_Lane_Resources_Manager, + ACE_TEXT ("RT_Thread_Lane_Resources_Manager"), + ACE_SVC_OBJ_T, + &ACE_SVC_NAME (TAO_RT_Thread_Lane_Resources_Manager), + ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ, + 0) +ACE_FACTORY_DEFINE (TAO, TAO_RT_Thread_Lane_Resources_Manager) diff --git a/TAO/tao/RTCORBA/RT_Thread_Lane_Resources_Manager.h b/TAO/tao/RTCORBA/RT_Thread_Lane_Resources_Manager.h new file mode 100644 index 00000000000..0d42b9cb0cd --- /dev/null +++ b/TAO/tao/RTCORBA/RT_Thread_Lane_Resources_Manager.h @@ -0,0 +1,67 @@ +//============================================================================= +/** + * @file RT_Thread_Lane_Resources_Manager.h + * + * $Id$ + * + * @author Irfan Pyarali + */ +// =================================================================== + +#ifndef TAO_RT_THREAD_LANE_RESOURCES_MANAGER_H +#define TAO_RT_THREAD_LANE_RESOURCES_MANAGER_H + +#include "ace/pre.h" +#include "tao/orbconf.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "tao/Thread_Lane_Resources_Manager.h" +#include "ace/Service_Config.h" + +/** + * @class TAO_RT_Thread_Lane_Resources_Manager + * + * @brief Simple manager for thread lane resources. + * + * \nosubgrouping + * + **/ +class TAO_RTCORBA_Export TAO_RT_Thread_Lane_Resources_Manager : + public TAO_Thread_Lane_Resources_Manager +{ +public: + TAO_RT_Thread_Lane_Resources_Manager (void); + ~TAO_RT_Thread_Lane_Resources_Manager (void); + + int initialize (TAO_ORB_Core &orb_core); + void finalize (void); + + int open_default_resources (CORBA_Environment &ACE_TRY_ENV); + + TAO_Thread_Lane_Resources &lane_resources (void); + + /// Mutual exclusion for calling open. + TAO_SYNCH_MUTEX open_lock_; + + /// Flag which denotes that the open method was called. + int open_called_; + + TAO_Thread_Lane_Resources *default_lane_resources_; + + /// ORB_Core related to this thread lane. + TAO_ORB_Core *orb_core_; +}; + +ACE_STATIC_SVC_DECLARE_EXPORT (TAO, TAO_RT_Thread_Lane_Resources_Manager) +ACE_FACTORY_DECLARE (TAO, TAO_RT_Thread_Lane_Resources_Manager) + +#if defined (__ACE_INLINE__) +# include "tao/RT_Thread_Lane_Resources_Manager.i" +#endif /* __ACE_INLINE__ */ + +#include "ace/post.h" + +#endif /* TAO_RT_THREAD_LANE_RESOURCES_MANAGER_H */ diff --git a/TAO/tao/RTPortableServer/RT_Policy_Validator.cpp b/TAO/tao/RTPortableServer/RT_Policy_Validator.cpp index e5472a659ab..895a53d6fab 100644 --- a/TAO/tao/RTPortableServer/RT_Policy_Validator.cpp +++ b/TAO/tao/RTPortableServer/RT_Policy_Validator.cpp @@ -8,8 +8,8 @@ ACE_RCSID(tao, POA, "$Id$") -TAO_POA_RT_Policy_Validator::TAO_POA_RT_Policy_Validator (TAO_ORB_Core *orb_core) - : orb_core_ (orb_core) +TAO_POA_RT_Policy_Validator::TAO_POA_RT_Policy_Validator (TAO_ORB_Core &orb_core) + : TAO_POA_Policy_Validator (orb_core) { // No-Op. } @@ -23,9 +23,6 @@ void TAO_POA_RT_Policy_Validator::validate_impl (TAO_Policy_Set &policies, CORBA::Environment &ACE_TRY_ENV) { - this->orb_core_->open (ACE_TRY_ENV); - ACE_CHECK; - this->validate_server_protocol (policies, ACE_TRY_ENV); ACE_CHECK; @@ -68,7 +65,7 @@ TAO_POA_RT_Policy_Validator::validate_server_protocol (TAO_Policy_Set &policies, RTCORBA::ProtocolList &protocols = server_protocol->protocols_rep (); - TAO_Acceptor_Registry *ar = this->orb_core_->acceptor_registry (); + TAO_Acceptor_Registry *ar = this->orb_core_.acceptor_registry (); for (CORBA::ULong j = 0; j < protocols.length (); ++j) { @@ -161,7 +158,7 @@ TAO_POA_RT_Policy_Validator::validate_priorities (TAO_Policy_Set &policies, } // Check 3. - TAO_Acceptor_Registry *ar = this->orb_core_->acceptor_registry (); + TAO_Acceptor_Registry *ar = this->orb_core_.acceptor_registry (); for (CORBA::ULong i = 0; i < bands.length (); ++i) { int match = 0; @@ -190,7 +187,7 @@ TAO_POA_RT_Policy_Validator::validate_priorities (TAO_Policy_Set &policies, // priority. if (rt_priority_model == RTCORBA::SERVER_DECLARED) { - TAO_Acceptor_Registry *ar = this->orb_core_->acceptor_registry (); + TAO_Acceptor_Registry *ar = this->orb_core_.acceptor_registry (); for (TAO_AcceptorSetIterator a = ar->begin (); a != ar->end (); ++a) { diff --git a/TAO/tao/RTPortableServer/RT_Policy_Validator.h b/TAO/tao/RTPortableServer/RT_Policy_Validator.h index 613b400221b..b1420068050 100644 --- a/TAO/tao/RTPortableServer/RT_Policy_Validator.h +++ b/TAO/tao/RTPortableServer/RT_Policy_Validator.h @@ -31,7 +31,7 @@ class TAO_RTPortableServer_Export TAO_POA_RT_Policy_Validator { public: /// Constructor. - TAO_POA_RT_Policy_Validator (TAO_ORB_Core *orb_core); + TAO_POA_RT_Policy_Validator (TAO_ORB_Core &orb_core); /// Destructor. ~TAO_POA_RT_Policy_Validator (void); @@ -60,13 +60,7 @@ private: void validate_priorities (TAO_Policy_Set &policies, CORBA::Environment &ACE_TRY_ENV); - - -private: - TAO_ORB_Core *orb_core_; }; #include "ace/post.h" #endif /* TAO_RT_POLICY_VALIDATOR_H_ */ - - diff --git a/TAO/tao/TAO.dsp b/TAO/tao/TAO.dsp index 8ba364e42c7..ec3d2f86b72 100644 --- a/TAO/tao/TAO.dsp +++ b/TAO/tao/TAO.dsp @@ -799,6 +799,14 @@ SOURCE=.\Thread_Lane_Resources.cpp # End Source File
# Begin Source File
+SOURCE=.\Thread_Lane_Resources_Manager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Default_Thread_Lane_Resources_Manager.cpp
+# End Source File
+# Begin Source File
+
SOURCE=.\TimeBaseC.cpp
# End Source File
# Begin Source File
@@ -1603,6 +1611,14 @@ SOURCE=.\Thread_Lane_Resources.h # End Source File
# Begin Source File
+SOURCE=.\Thread_Lane_Resources_Manager.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Default_Thread_Lane_Resources_Manager.h
+# End Source File
+# Begin Source File
+
SOURCE=.\TimeBaseC.h
# End Source File
# Begin Source File
@@ -2191,6 +2207,14 @@ SOURCE=.\Thread_Lane_Resources.i # End Source File
# Begin Source File
+SOURCE=.\Thread_Lane_Resources_Manager.i
+# End Source File
+# Begin Source File
+
+SOURCE=.\Default_Thread_Lane_Resources_Manager.i
+# End Source File
+# Begin Source File
+
SOURCE=.\TimeBaseC.i
# End Source File
# Begin Source File
diff --git a/TAO/tao/TAO_Internal.cpp b/TAO/tao/TAO_Internal.cpp index c82397ec8f8..28015aad284 100644 --- a/TAO/tao/TAO_Internal.cpp +++ b/TAO/tao/TAO_Internal.cpp @@ -23,7 +23,7 @@ #include "Default_Stub_Factory.h" #include "Default_Endpoint_Selector_Factory.h" #include "Default_Protocols_Hooks.h" -#include "Thread_Lane_Resources.h" +#include "Default_Thread_Lane_Resources_Manager.h" ACE_RCSID (tao, TAO_Internal, diff --git a/TAO/tao/Thread_Lane_Resources.cpp b/TAO/tao/Thread_Lane_Resources.cpp index 4ba21fe3ea1..bb431787676 100644 --- a/TAO/tao/Thread_Lane_Resources.cpp +++ b/TAO/tao/Thread_Lane_Resources.cpp @@ -140,180 +140,3 @@ TAO_Thread_Lane_Resources::finalize (void) } } } - -// **************************************************************** - -TAO_Thread_Lane_Resources_Manager::~TAO_Thread_Lane_Resources_Manager (void) -{ -} - -// **************************************************************** - -TAO_Default_Thread_Lane_Resources_Manager::TAO_Default_Thread_Lane_Resources_Manager (void) - : open_called_ (0), - lane_resources_ (0), - orb_core_ (0) -{ -} - -TAO_Default_Thread_Lane_Resources_Manager::~TAO_Default_Thread_Lane_Resources_Manager (void) -{ - delete this->lane_resources_; -} - -int -TAO_Default_Thread_Lane_Resources_Manager::initialize (TAO_ORB_Core &orb_core) -{ - this->orb_core_ = - &orb_core; - - ACE_NEW_RETURN (this->lane_resources_, - TAO_Thread_Lane_Resources (orb_core), - -1); - - return 0; -} - -int -TAO_Default_Thread_Lane_Resources_Manager::open (CORBA_Environment &ACE_TRY_ENV) -{ - // Double check pattern - if (this->open_called_ == 1) - return 1; - - ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, tao_mon, this->open_lock_, -1); - - if (this->open_called_ == 1) - return 1; - - TAO_Acceptor_Registry &ar = - this->lane_resources_->acceptor_registry (); - // get a reference to the acceptor_registry! - - int ret = - ar.open (this->orb_core_, - this->lane_resources_->leader_follower ().reactor (), - ACE_TRY_ENV); - ACE_CHECK_RETURN (-1); - - if (ret == -1) - return -1; - - this->open_called_ = 1; - - return 0; -} - -void -TAO_Default_Thread_Lane_Resources_Manager::finalize (void) -{ - this->lane_resources_->finalize (); -} - -TAO_Thread_Lane_Resources & -TAO_Default_Thread_Lane_Resources_Manager::lane_resources (void) -{ - return *this->lane_resources_; -} - -// **************************************************************** - -TAO_RT_Thread_Lane_Resources_Manager::TAO_RT_Thread_Lane_Resources_Manager (void) - : open_called_ (0), - default_lane_resources_ (0), - orb_core_ (0) -{ -} - -TAO_RT_Thread_Lane_Resources_Manager::~TAO_RT_Thread_Lane_Resources_Manager (void) -{ - delete this->default_lane_resources_; -} - -int -TAO_RT_Thread_Lane_Resources_Manager::initialize (TAO_ORB_Core &orb_core) -{ - this->orb_core_ = - &orb_core; - - ACE_NEW_RETURN (this->default_lane_resources_, - TAO_Thread_Lane_Resources (orb_core), - -1); - - return 0; -} - -int -TAO_RT_Thread_Lane_Resources_Manager::open (CORBA_Environment &ACE_TRY_ENV) -{ - // Double check pattern - if (this->open_called_ == 1) - return 1; - - ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, tao_mon, this->open_lock_, -1); - - if (this->open_called_ == 1) - return 1; - - TAO_Acceptor_Registry &ar = - this->default_lane_resources_->acceptor_registry (); - // get a reference to the acceptor_registry! - - int ret = - ar.open (this->orb_core_, - this->default_lane_resources_->leader_follower ().reactor (), - ACE_TRY_ENV); - ACE_CHECK_RETURN (-1); - - if (ret == -1) - return -1; - - this->open_called_ = 1; - - return 0; -} - -void -TAO_RT_Thread_Lane_Resources_Manager::finalize (void) -{ - this->default_lane_resources_->finalize (); -} - -TAO_Thread_Lane_Resources & -TAO_RT_Thread_Lane_Resources_Manager::lane_resources (void) -{ - /// Get the ORB_Core's TSS resources. - TAO_ORB_Core_TSS_Resources &tss = - this->orb_core_->get_tss_resources (); - - /// Get the lane for this thread. - TAO_Thread_Lane *lane = - (TAO_Thread_Lane *) tss.lane_; - - if (lane) - return lane->resources (); - else - return *this->default_lane_resources_; -} - -// **************************************************************** - -ACE_STATIC_SVC_DEFINE (TAO_Default_Thread_Lane_Resources_Manager, - ACE_TEXT ("Default_Thread_Lane_Resources_Manager"), - ACE_SVC_OBJ_T, - &ACE_SVC_NAME (TAO_Default_Thread_Lane_Resources_Manager), - ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ, - 0) -ACE_FACTORY_DEFINE (TAO, TAO_Default_Thread_Lane_Resources_Manager) - -// **************************************************************** - -#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) - -template class ACE_Dynamic_Service<TAO_Thread_Lane_Resources_Manager>; - -#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) - -#pragma instantiate ACE_Dynamic_Service<TAO_Thread_Lane_Resources_Manager> - -#endif diff --git a/TAO/tao/Thread_Lane_Resources.h b/TAO/tao/Thread_Lane_Resources.h index 9a42c180e70..9237dd5161a 100644 --- a/TAO/tao/Thread_Lane_Resources.h +++ b/TAO/tao/Thread_Lane_Resources.h @@ -19,8 +19,6 @@ #endif /* ACE_LACKS_PRAGMA_ONCE */ #include "tao/corbafwd.h" -#include "ace/Service_Object.h" -#include "ace/Service_Config.h" class TAO_ORB_Core; class TAO_Acceptor_Registry; @@ -80,62 +78,6 @@ private: TAO_SYNCH_MUTEX lock_; }; -/** - * @class TAO_Thread_Lane_Resources_Manager - * - * This class is a manager for thread resources. - **/ -class TAO_Export TAO_Thread_Lane_Resources_Manager - : public ACE_Service_Object -{ -public: - virtual ~TAO_Thread_Lane_Resources_Manager (void); - - virtual int initialize (TAO_ORB_Core &orb_core) = 0; - virtual void finalize (void) = 0; - - virtual int open (CORBA_Environment &ACE_TRY_ENV) = 0; - - virtual TAO_Thread_Lane_Resources &lane_resources (void) = 0; -}; - -/** - * @class TAO_Default_Thread_Lane_Resources_Manager - * - * @brief Simple manager for thread lane resources. - * - * \nosubgrouping - * - **/ -class TAO_Export TAO_Default_Thread_Lane_Resources_Manager : - public TAO_Thread_Lane_Resources_Manager -{ -public: - TAO_Default_Thread_Lane_Resources_Manager (void); - ~TAO_Default_Thread_Lane_Resources_Manager (void); - - int initialize (TAO_ORB_Core &orb_core); - void finalize (void); - - int open (CORBA_Environment &ACE_TRY_ENV); - - TAO_Thread_Lane_Resources &lane_resources (void); - - /// Mutual exclusion for calling open. - TAO_SYNCH_MUTEX open_lock_; - - /// Flag which denotes that the open method was called. - int open_called_; - - TAO_Thread_Lane_Resources *lane_resources_; - - /// ORB_Core related to this thread lane. - TAO_ORB_Core *orb_core_; -}; - -ACE_STATIC_SVC_DECLARE_EXPORT (TAO, TAO_Default_Thread_Lane_Resources_Manager) -ACE_FACTORY_DECLARE (TAO, TAO_Default_Thread_Lane_Resources_Manager) - #if defined (__ACE_INLINE__) # include "tao/Thread_Lane_Resources.i" #endif /* __ACE_INLINE__ */ diff --git a/TAO/tao/Thread_Lane_Resources_Manager.cpp b/TAO/tao/Thread_Lane_Resources_Manager.cpp new file mode 100644 index 00000000000..5148438f45b --- /dev/null +++ b/TAO/tao/Thread_Lane_Resources_Manager.cpp @@ -0,0 +1,23 @@ +// $Id$ + +#include "tao/Thread_Lane_Resources_Manager.h" + +ACE_RCSID(tao, Thread_Lane_Resources_Manager, "$Id$") + +#if !defined (__ACE_INLINE__) +# include "tao/Thread_Lane_Resources_Manager.i" +#endif /* ! __ACE_INLINE__ */ + +TAO_Thread_Lane_Resources_Manager::~TAO_Thread_Lane_Resources_Manager (void) +{ +} + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) + +template class ACE_Dynamic_Service<TAO_Thread_Lane_Resources_Manager>; + +#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) + +#pragma instantiate ACE_Dynamic_Service<TAO_Thread_Lane_Resources_Manager> + +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ diff --git a/TAO/tao/Thread_Lane_Resources_Manager.h b/TAO/tao/Thread_Lane_Resources_Manager.h new file mode 100644 index 00000000000..21a2522872f --- /dev/null +++ b/TAO/tao/Thread_Lane_Resources_Manager.h @@ -0,0 +1,52 @@ +//============================================================================= +/** + * @file Thread_Lane_Resources_Manager.h + * + * $Id$ + * + * @author Irfan Pyarali + */ +// =================================================================== + +#ifndef TAO_THREAD_LANE_RESOURCES_MANAGER_H +#define TAO_THREAD_LANE_RESOURCES_MANAGER_H + +#include "ace/pre.h" +#include "tao/orbconf.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "tao/corbafwd.h" +#include "ace/Service_Object.h" + +class TAO_ORB_Core; +class TAO_Thread_Lane_Resources; + +/** + * @class TAO_Thread_Lane_Resources_Manager + * + * This class is a manager for thread resources. + **/ +class TAO_Export TAO_Thread_Lane_Resources_Manager + : public ACE_Service_Object +{ +public: + virtual ~TAO_Thread_Lane_Resources_Manager (void); + + virtual int initialize (TAO_ORB_Core &orb_core) = 0; + virtual void finalize (void) = 0; + + virtual int open_default_resources (CORBA_Environment &ACE_TRY_ENV) = 0; + + virtual TAO_Thread_Lane_Resources &lane_resources (void) = 0; +}; + +#if defined (__ACE_INLINE__) +# include "tao/Thread_Lane_Resources_Manager.i" +#endif /* __ACE_INLINE__ */ + +#include "ace/post.h" + +#endif /* TAO_THREAD_LANE_RESOURCES_MANAGER_H */ diff --git a/TAO/tao/Thread_Lane_Resources_Manager.i b/TAO/tao/Thread_Lane_Resources_Manager.i new file mode 100644 index 00000000000..cfa1da318d3 --- /dev/null +++ b/TAO/tao/Thread_Lane_Resources_Manager.i @@ -0,0 +1 @@ +// $Id$ |