diff options
Diffstat (limited to 'TAO/tao/default_resource.cpp')
-rw-r--r-- | TAO/tao/default_resource.cpp | 91 |
1 files changed, 87 insertions, 4 deletions
diff --git a/TAO/tao/default_resource.cpp b/TAO/tao/default_resource.cpp index 66c4bd7dfb7..f1268b361b5 100644 --- a/TAO/tao/default_resource.cpp +++ b/TAO/tao/default_resource.cpp @@ -9,6 +9,9 @@ #include "tao/UIOP_Factory.h" #include "tao/Acceptor_Registry.h" #include "tao/Connector_Registry.h" +#include "tao/Single_Reactor.h" +#include "tao/Reactor_Per_Priority.h" +#include "tao/Priority_Mapping.h" #include "ace/Select_Reactor.h" #include "ace/FlReactor.h" @@ -27,12 +30,14 @@ ACE_RCSID(tao, default_resource, "$Id$") TAO_Default_Resource_Factory::TAO_Default_Resource_Factory (void) : use_tss_resources_ (0), use_locked_data_blocks_ (1), + reactor_registry_type_ (TAO_SINGLE_REACTOR), reactor_type_ (TAO_REACTOR_SELECT_MT), cdr_allocator_type_ (TAO_ALLOCATOR_THREAD_LOCK), protocol_factories_ (), connection_caching_type_ (TAO_CONNECTION_CACHING_STRATEGY), purge_percentage_ (TAO_PURGE_PERCENT), - reactor_mask_signals_ (1) + reactor_mask_signals_ (1), + sched_policy_ (ACE_SCHED_OTHER) { } @@ -106,6 +111,27 @@ TAO_Default_Resource_Factory::init (int argc, char **argv) } else if (ACE_OS::strcasecmp (argv[curarg], + "-ORBReactorRegistry") == 0) + { + curarg++; + if (curarg < argc) + { + char *name = argv[curarg]; + + if (ACE_OS::strcasecmp (name, + "single") == 0) + this->reactor_registry_type_ = TAO_SINGLE_REACTOR; + else if (ACE_OS::strcasecmp (name, + "per-priority") == 0) + this->reactor_registry_type_ = TAO_REACTOR_PER_PRIORITY; + else + ACE_DEBUG ((LM_DEBUG, + "TAO_Default_Factory - unknown argument" + " <%s> for -ORBReactorRegistry\n", name)); + } + } + + else if (ACE_OS::strcasecmp (argv[curarg], "-ORBReactorType") == 0) { curarg++; @@ -237,6 +263,30 @@ TAO_Default_Resource_Factory::init (int argc, char **argv) "for -ORBPurgePercentage\n")); } + else if (ACE_OS::strcasecmp (argv[curarg], + "-ORBSchedPolicy") == 0) + { + curarg++; + if (curarg < argc) + { + char *name = argv[curarg]; + + if (ACE_OS::strcasecmp (name, + "SCHED_OTHER") == 0) + this->sched_policy_ = ACE_SCHED_OTHER; + else if (ACE_OS::strcasecmp (name, + "SCHED_FIFO") == 0) + this->sched_policy_ = ACE_SCHED_FIFO; + else if (ACE_OS::strcasecmp (name, + "SCHED_RR") == 0) + this->sched_policy_ = ACE_SCHED_RR; + else + ACE_DEBUG ((LM_DEBUG, + "TAO_Default_Factory - unknown argument" + " <%s> for -ORBSchedPolicy\n", name)); + } + } + return 0; } @@ -393,9 +443,28 @@ TAO_Default_Resource_Factory::get_connector_registry (void) return cr; } -// @@ TODO We may be changing the state of the global -// Allocated_Resources structure, but without any locks? -// It seems to be done all over the place. +TAO_Reactor_Registry * +TAO_Default_Resource_Factory::get_reactor_registry (void) +{ + TAO_Reactor_Registry *reactor_registry = 0; + switch (this->reactor_registry_type_) + { + default: + case TAO_SINGLE_REACTOR: + ACE_NEW_RETURN (reactor_registry, + TAO_Single_Reactor, + 0); + break; + + case TAO_REACTOR_PER_PRIORITY: + ACE_NEW_RETURN (reactor_registry, + TAO_Reactor_Per_Priority, + 0); + break; + } + + return reactor_registry; +} ACE_Reactor_Impl* TAO_Default_Resource_Factory::allocate_reactor_impl (void) const @@ -551,6 +620,20 @@ TAO_Default_Resource_Factory::purge_percentage (void) const return this->purge_percentage_; } +TAO_Priority_Mapping * +TAO_Default_Resource_Factory::get_priority_mapping (void) +{ +#if !defined (TAO_HAS_RT_CORBA) + return 0; +#else + TAO_Priority_Mapping *pm; + ACE_NEW_RETURN (pm, + TAO_Priority_Mapping (this->sched_policy_), + 0); + return pm; +#endif /* TAO_HAS_RT_CORBA */ +} + // **************************************************************** ACE_STATIC_SVC_DEFINE (TAO_Default_Resource_Factory, |