RT_Thread_Lane_Resources_Manager.cpp

Go to the documentation of this file.
00001 // $Id: RT_Thread_Lane_Resources_Manager.cpp 79943 2007-11-06 16:02:28Z vzykov $
00002 
00003 #include "tao/RTCORBA/RT_Thread_Lane_Resources_Manager.h"
00004 
00005 #if defined (TAO_HAS_CORBA_MESSAGING) && TAO_HAS_CORBA_MESSAGING != 0
00006 
00007 ACE_RCSID (RTCORBA,
00008            RT_Thread_Lane_Resources_Manager,
00009            "$Id: RT_Thread_Lane_Resources_Manager.cpp 79943 2007-11-06 16:02:28Z vzykov $")
00010 
00011 #include "tao/ORB_Core.h"
00012 #include "tao/ORB_Core_TSS_Resources.h"
00013 #include "tao/Acceptor_Registry.h"
00014 #include "tao/Thread_Lane_Resources.h"
00015 #include "tao/RTCORBA/Thread_Pool.h"
00016 #include "tao/LF_Follower.h"
00017 #include "tao/Leader_Follower.h"
00018 
00019 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00020 
00021 TAO_RT_Thread_Lane_Resources_Manager::TAO_RT_Thread_Lane_Resources_Manager (TAO_ORB_Core &orb_core)
00022   : TAO_Thread_Lane_Resources_Manager (orb_core),
00023     default_lane_resources_ (0),
00024     tp_manager_ (0)
00025 {
00026   // Create the default resources.
00027   ACE_NEW (this->default_lane_resources_,
00028            TAO_Thread_Lane_Resources (orb_core));
00029 
00030   // Create the thread-pool manager.
00031   ACE_NEW (this->tp_manager_,
00032            TAO_Thread_Pool_Manager (orb_core));
00033 
00034 }
00035 
00036 TAO_RT_Thread_Lane_Resources_Manager::~TAO_RT_Thread_Lane_Resources_Manager (void)
00037 {
00038   // Delete the default resources.
00039   delete this->default_lane_resources_;
00040 
00041   // Delete the thread-pool manager.
00042   delete this->tp_manager_;
00043 }
00044 
00045 int
00046 TAO_RT_Thread_Lane_Resources_Manager::open_default_resources (void)
00047 {
00048   TAO_ORB_Parameters *params =
00049     this->orb_core_->orb_params ();
00050 
00051   TAO_EndpointSet endpoint_set;
00052 
00053   params->get_endpoint_set (TAO_DEFAULT_LANE, endpoint_set);
00054 
00055   bool ignore_address = false;
00056 
00057   int const result =
00058     this->default_lane_resources_->open_acceptor_registry (endpoint_set,
00059                                                            ignore_address);
00060 
00061   return result;
00062 }
00063 
00064 void
00065 TAO_RT_Thread_Lane_Resources_Manager::finalize (void)
00066 {
00067   // Finalize resources managed by the thread-pool manager.
00068   this->tp_manager_->finalize ();
00069 
00070   // Finalize default resources.
00071   this->default_lane_resources_->finalize ();
00072 }
00073 
00074 void
00075 TAO_RT_Thread_Lane_Resources_Manager::shutdown_reactor (void)
00076 {
00077   // Shutdown default reactors.
00078   this->default_lane_resources_->shutdown_reactor ();
00079 
00080   // Shutdown reactors managed by the thread-pool manager.
00081   this->tp_manager_->shutdown_reactor ();
00082 }
00083 
00084 void
00085 TAO_RT_Thread_Lane_Resources_Manager::cleanup_rw_transports (void)
00086 {
00087   // Shutdown default reactors.
00088   this->default_lane_resources_->cleanup_rw_transports ();
00089 }
00090 
00091 int
00092 TAO_RT_Thread_Lane_Resources_Manager::is_collocated (const TAO_MProfile &mprofile)
00093 {
00094   int result =
00095     this->default_lane_resources_->is_collocated (mprofile);
00096 
00097   if (result)
00098     return result;
00099 
00100   return this->tp_manager_->is_collocated (mprofile);
00101 }
00102 
00103 TAO_Thread_Lane_Resources &
00104 TAO_RT_Thread_Lane_Resources_Manager::lane_resources (void)
00105 {
00106   // Get the ORB_Core's TSS resources.
00107   TAO_ORB_Core_TSS_Resources &tss =
00108     *this->orb_core_->get_tss_resources ();
00109 
00110   // Get the lane for this thread.
00111   TAO_Thread_Lane *lane =
00112     static_cast <TAO_Thread_Lane *> (tss.lane_);
00113 
00114   // If we have a valid lane, use that lane's resources.
00115   if (lane)
00116     return lane->resources ();
00117   else
00118     // Otherwise, return the default resources.
00119     return *this->default_lane_resources_;
00120 }
00121 
00122 TAO_Thread_Lane_Resources &
00123 TAO_RT_Thread_Lane_Resources_Manager::default_lane_resources (void)
00124 {
00125   return *this->default_lane_resources_;
00126 }
00127 
00128 TAO_Thread_Pool_Manager &
00129 TAO_RT_Thread_Lane_Resources_Manager::tp_manager (void)
00130 {
00131   return *this->tp_manager_;
00132 }
00133 
00134 TAO_Thread_Lane_Resources_Manager *
00135 TAO_RT_Thread_Lane_Resources_Manager_Factory::create_thread_lane_resources_manager (TAO_ORB_Core &core)
00136 {
00137   TAO_Thread_Lane_Resources_Manager *manager = 0;
00138 
00139   /// Create the RT Thread Lane Resources Manager.
00140   ACE_NEW_RETURN (manager,
00141                   TAO_RT_Thread_Lane_Resources_Manager (core),
00142                   0);
00143 
00144   return manager;
00145 }
00146 
00147 TAO_END_VERSIONED_NAMESPACE_DECL
00148 
00149 ACE_STATIC_SVC_DEFINE (TAO_RT_Thread_Lane_Resources_Manager_Factory,
00150                        ACE_TEXT ("RT_Thread_Lane_Resources_Manager_Factory"),
00151                        ACE_SVC_OBJ_T,
00152                        &ACE_SVC_NAME (TAO_RT_Thread_Lane_Resources_Manager_Factory),
00153                        ACE_Service_Type::DELETE_THIS | ACE_Service_Type::DELETE_OBJ,
00154                        0)
00155 ACE_FACTORY_DEFINE (TAO_RTCORBA, TAO_RT_Thread_Lane_Resources_Manager_Factory)
00156 
00157 #endif /* TAO_HAS_CORBA_MESSAGING && TAO_HAS_CORBA_MESSAGING != 0 */

Generated on Tue Feb 2 17:42:49 2010 for TAO_RTCORBA by  doxygen 1.4.7