diff options
author | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-02-05 08:41:16 +0000 |
---|---|---|
committer | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-02-05 08:41:16 +0000 |
commit | 15a54900a00cfc94301d477707dd51253983d43c (patch) | |
tree | 0eb9a744edd05833980315719960965502070b63 /TAO/orbsvcs/orbsvcs/Event/Event_Channel.cpp | |
parent | 35697fcbcbdd5e2308b446729a27faf451427afa (diff) | |
download | ATCD-15a54900a00cfc94301d477707dd51253983d43c.tar.gz |
ChangeLogTag:Fri Feb 5 02:34:27 1999 Carlos O'Ryan <coryan@cs.wustl.edu>
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Event/Event_Channel.cpp')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Event/Event_Channel.cpp | 103 |
1 files changed, 70 insertions, 33 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Event/Event_Channel.cpp b/TAO/orbsvcs/orbsvcs/Event/Event_Channel.cpp index db04889aa21..de206ac2b81 100644 --- a/TAO/orbsvcs/orbsvcs/Event/Event_Channel.cpp +++ b/TAO/orbsvcs/orbsvcs/Event/Event_Channel.cpp @@ -88,7 +88,8 @@ ACE_TIMEPROBE_EVENT_DESCRIPTIONS (TAO_Event_Channel_Timeprobe_Description, // ************************************************************ static RtecScheduler::Preemption_Priority_t -Preemption_Priority (RtecScheduler::handle_t rtinfo, +Preemption_Priority (RtecScheduler::Scheduler_ptr scheduler, + RtecScheduler::handle_t rtinfo, CORBA::Environment &TAO_IN_ENV) { RtecScheduler::OS_Priority thread_priority; @@ -96,12 +97,22 @@ Preemption_Priority (RtecScheduler::handle_t rtinfo, RtecScheduler::Preemption_Priority_t preemption_priority; ACE_TIMEPROBE (TAO_EVENT_CHANNEL_PREEMPTION_PRIORITY_PRIORITY_REQUESTED); + +#if 1 + scheduler->priority + (rtinfo, + thread_priority, + subpriority, + preemption_priority, + TAO_IN_ENV); +#else ACE_Scheduler_Factory::server ()->priority (rtinfo, thread_priority, subpriority, preemption_priority, TAO_IN_ENV); +#endif TAO_CHECK_ENV_RETURN (TAO_IN_ENV, 0); return preemption_priority; } @@ -137,7 +148,8 @@ public: // When executed, tells <consumer_module> that <consumer> has shut // down. Shutdown_Consumer (ACE_ES_Consumer_Module *consumer_module, - ACE_Push_Consumer_Proxy *consumer) + ACE_Push_Consumer_Proxy *consumer, + RtecScheduler::Scheduler_ptr scheduler) : consumer_module_ (consumer_module) { consumer_ = consumer; @@ -159,7 +171,7 @@ public: { env.clear (); RtecScheduler::Preemption_Priority_t q = - ::Preemption_Priority ((*iter).rt_info, env); + ::Preemption_Priority (scheduler, (*iter).rt_info, env); if (env.exception () != 0) continue; if (rt_info_ == 0 || q < p) @@ -396,9 +408,7 @@ ACE_Push_Consumer_Proxy::push (const RtecEventComm::EventSet &events, if (CORBA::is_nil (push_consumer_.in ())) { ACE_DEBUG ((LM_DEBUG, - "EC (%t) Push to disconnected consumer %s\n", - ::ACE_ES_Consumer_Name (this->qos (), - TAO_IN_ENV))); + "EC (%t) Push to disconnected consumer\n")); // ACE_ES_DEBUG_ST (::dump_sequence (events)); return; } @@ -470,7 +480,8 @@ ACE_Push_Consumer_Proxy::shutdown (void) ACE_EventChannel::ACE_EventChannel (CORBA::Boolean activate_threads, u_long type, - TAO_Module_Factory* factory) + TAO_Module_Factory* factory, + RtecScheduler::Scheduler_ptr scheduler) : rtu_manager_ (0), type_ (type), state_ (INITIAL_STATE), @@ -484,6 +495,16 @@ ACE_EventChannel::ACE_EventChannel (CORBA::Boolean activate_threads, this->own_factory_ = 1; ACE_NEW (this->module_factory_, TAO_Default_Module_Factory); } + if (CORBA::is_nil (scheduler)) + { + this->scheduler_ = + RtecScheduler::Scheduler::_duplicate (ACE_Scheduler_Factory::server ()); + } + else + { + this->scheduler_ = + RtecScheduler::Scheduler::_duplicate (scheduler); + } consumer_module_ = this->module_factory_->create_consumer_module (this); @@ -1231,7 +1252,10 @@ ACE_ES_Consumer_Module::disconnecting (ACE_Push_Consumer_Proxy *consumer, // Create a shutdown message. When this is dispatched, it will // delete the proxy. - Shutdown_Consumer *sc = new Shutdown_Consumer (this, consumer); + RtecScheduler::Scheduler_var scheduler = + this->channel_->scheduler (); + Shutdown_Consumer *sc = + new Shutdown_Consumer (this, consumer, scheduler.in ()); if (sc == 0) TAO_THROW (CORBA::NO_MEMORY (CORBA::COMPLETED_NO)); @@ -2151,6 +2175,7 @@ ACE_ES_Subscription_Module::ACE_ES_Subscription_Module (ACE_EventChannel *channe up_ (0), down_ (0) { + this->scheduler_ = this->channel_->scheduler (); } void @@ -2245,15 +2270,22 @@ ACE_ES_Subscription_Module::connected (ACE_Push_Supplier_Proxy *supplier, // new subscribers list. Dependencies are updated. // @@ TODO: Handle exceptions. +#if 1 + this->scheduler_->add_dependency + ((*proxy)->dependency()->rt_info, + new_subscribers->dependency_info_->rt_info, + new_subscribers->dependency_info_->number_of_calls, + RtecScheduler::ONE_WAY_CALL, + TAO_IN_ENV); +#else ACE_Scheduler_Factory::server()->add_dependency ((*proxy)->dependency()->rt_info, new_subscribers->dependency_info_->rt_info, new_subscribers->dependency_info_->number_of_calls, RtecScheduler::ONE_WAY_CALL, TAO_IN_ENV); - if (TAO_IN_ENV.exception () != 0) - return; - // @@ TODO use the TAO_TRY macros. +#endif + TAO_CHECK_ENV_RETURN_VOID (TAO_IN_ENV); if (new_subscribers->consumers_.insert (*proxy) == -1) { @@ -2617,12 +2649,21 @@ ACE_ES_Subscription_Module::subscribe_source (ACE_ES_Consumer_Rep *consumer, { TAO_TRY { +#if 1 + this->scheduler_->add_dependency + (consumer->dependency()->rt_info, + temp->int_id_->dependency_info_->rt_info, + temp->int_id_->dependency_info_->number_of_calls, + RtecScheduler::ONE_WAY_CALL, + TAO_TRY_ENV); +#else ACE_Scheduler_Factory::server()->add_dependency (consumer->dependency()->rt_info, temp->int_id_->dependency_info_->rt_info, temp->int_id_->dependency_info_->number_of_calls, RtecScheduler::ONE_WAY_CALL, TAO_TRY_ENV); +#endif TAO_CHECK_ENV; } TAO_CATCHANY @@ -2682,12 +2723,21 @@ ACE_ES_Subscription_Module::subscribe_type (ACE_ES_Consumer_Rep *consumer, // @@ TODO handle exceptions. TAO_TRY { +#if 1 + this->scheduler_->add_dependency + (consumer->dependency ()->rt_info, + dependency_info->rt_info, + dependency_info->number_of_calls, + RtecScheduler::ONE_WAY_CALL, + TAO_TRY_ENV); +#else ACE_Scheduler_Factory::server()->add_dependency (consumer->dependency ()->rt_info, dependency_info->rt_info, dependency_info->number_of_calls, RtecScheduler::ONE_WAY_CALL, TAO_TRY_ENV); +#endif TAO_CHECK_ENV; } TAO_CATCHANY @@ -2742,12 +2792,21 @@ ACE_ES_Subscription_Module::subscribe_source_type (ACE_ES_Consumer_Rep *consumer // @@ TODO handle exceptions. TAO_TRY { +#if 1 + this->scheduler_->add_dependency + (consumer->dependency ()->rt_info, + dependency_info->rt_info, + dependency_info->number_of_calls, + RtecScheduler::ONE_WAY_CALL, + TAO_TRY_ENV); +#else ACE_Scheduler_Factory::server()->add_dependency (consumer->dependency ()->rt_info, dependency_info->rt_info, dependency_info->number_of_calls, RtecScheduler::ONE_WAY_CALL, TAO_TRY_ENV); +#endif TAO_CHECK_ENV; } TAO_CATCHANY @@ -3244,28 +3303,6 @@ ACE_ES_Supplier_Module::fill_qos (RtecEventChannelAdmin::SupplierQOS& s_qos) // ************************************************************ -const char * -ACE_ES_Consumer_Name (const RtecEventChannelAdmin::ConsumerQOS &qos, - CORBA::Environment &TAO_IN_ENV) -{ - // The first dependency should designate a correlation group. - - ACE_FUNCTION_TIMEPROBE (TAO_EVENT_CHANNEL_CONSUMER_NAME_PRIORITY_REQUESTED); - if (qos.dependencies.length () <= 1) - return "no-name"; - - RtecScheduler::RT_Info* rt_info = ACE_Scheduler_Factory::server ()->get - (qos.dependencies[1].rt_info, TAO_IN_ENV); - TAO_CHECK_ENV_RETURN (TAO_IN_ENV, 0); - - if (rt_info == 0) - return "no-name"; - - return rt_info->entry_point; -} - -// ************************************************************ - #if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) template class ACE_Atomic_Op<ACE_ES_MUTEX, int>; |