summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorirfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-07-25 07:23:51 +0000
committerirfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-07-25 07:23:51 +0000
commit24f20357f46d0564c79018236ef0d4b32df3838d (patch)
tree0b4e64baad0b99fc6e994af99b9c2f69a18cc799
parentd82d13f7c6d9f54cae8540099565724bc16124c8 (diff)
downloadATCD-24f20357f46d0564c79018236ef0d4b32df3838d.tar.gz
Thread Pool changes....
-rw-r--r--TAO/tao/Default_Thread_Lane_Resources_Manager.cpp90
-rw-r--r--TAO/tao/Default_Thread_Lane_Resources_Manager.h67
-rw-r--r--TAO/tao/Default_Thread_Lane_Resources_Manager.i1
-rw-r--r--TAO/tao/ORB_Core.cpp29
-rw-r--r--TAO/tao/ORB_Core.h7
-rw-r--r--TAO/tao/PortableServer/Default_Policy_Validator.cpp10
-rw-r--r--TAO/tao/PortableServer/Default_Policy_Validator.h6
-rw-r--r--TAO/tao/PortableServer/Object_Adapter.cpp1
-rw-r--r--TAO/tao/PortableServer/POA.cpp18
-rw-r--r--TAO/tao/PortableServer/Policy_Validator.cpp8
-rw-r--r--TAO/tao/PortableServer/Policy_Validator.h7
-rw-r--r--TAO/tao/RTCORBA/RT_Thread_Lane_Resources_Manager.cpp102
-rw-r--r--TAO/tao/RTCORBA/RT_Thread_Lane_Resources_Manager.h67
-rw-r--r--TAO/tao/RTPortableServer/RT_Policy_Validator.cpp13
-rw-r--r--TAO/tao/RTPortableServer/RT_Policy_Validator.h8
-rw-r--r--TAO/tao/TAO.dsp24
-rw-r--r--TAO/tao/TAO_Internal.cpp2
-rw-r--r--TAO/tao/Thread_Lane_Resources.cpp177
-rw-r--r--TAO/tao/Thread_Lane_Resources.h58
-rw-r--r--TAO/tao/Thread_Lane_Resources_Manager.cpp23
-rw-r--r--TAO/tao/Thread_Lane_Resources_Manager.h52
-rw-r--r--TAO/tao/Thread_Lane_Resources_Manager.i1
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$