summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Event/EC_Priority_Dispatching.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Event/EC_Priority_Dispatching.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/Event/EC_Priority_Dispatching.cpp136
1 files changed, 0 insertions, 136 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_Priority_Dispatching.cpp b/TAO/orbsvcs/orbsvcs/Event/EC_Priority_Dispatching.cpp
deleted file mode 100644
index 96911d289e7..00000000000
--- a/TAO/orbsvcs/orbsvcs/Event/EC_Priority_Dispatching.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-// $Id$
-
-#include "EC_Priority_Dispatching.h"
-#include "EC_Dispatching_Task.h"
-#include "EC_Event_Channel.h"
-#include "EC_QOS_Info.h"
-#include "orbsvcs/Event_Service_Constants.h"
-#include "orbsvcs/RtecSchedulerC.h"
-#include "ace/Sched_Params.h"
-
-#if ! defined (__ACE_INLINE__)
-#include "EC_Priority_Dispatching.i"
-#endif /* __ACE_INLINE__ */
-
-ACE_RCSID(Event, EC_Priority_Dispatching, "$Id$")
-
-TAO_EC_Priority_Dispatching::TAO_EC_Priority_Dispatching (TAO_EC_Event_Channel *ec)
- : ntasks_ (0),
- tasks_ (0),
- scheduler_ (ec->scheduler ())
-{
-}
-
-void
-TAO_EC_Priority_Dispatching::activate (void)
-{
- if (this->tasks_ != 0)
- return;
-
- // @@ Query the scheduler to obtain this....
- this->ntasks_ = ACE_Scheduler_MAX_PRIORITIES;
- ACE_NEW (this->tasks_, TAO_EC_Dispatching_Task*[this->ntasks_]);
-
- // @@ Query the scheduler to obtain the priorities!
- int priority =
- (ACE_Sched_Params::priority_min (ACE_SCHED_FIFO) +
- ACE_Sched_Params::priority_max (ACE_SCHED_FIFO)) / 2;
- priority = ACE_Sched_Params::next_priority (ACE_SCHED_FIFO, priority);
-
- ACE_DECLARE_NEW_CORBA_ENV;
- for (int i = 0; i < this->ntasks_; ++i)
- {
- ACE_TRY
- {
- RtecScheduler::Period_t period =
- ACE_CU64_TO_CU32 (ACE_Scheduler_Rates[i]);
- char buf[128];
- ACE_OS::sprintf (buf, "Dispatching_Task-%d.us", period);
-
- RtecScheduler::handle_t rt_info =
- this->scheduler_->create (buf, ACE_TRY_ENV);
- ACE_TRY_CHECK;
-
- this->scheduler_->set (rt_info,
- RtecScheduler::VERY_LOW_CRITICALITY,
- 0, // worst_cast_execution_time
- 0, // typical_cast_execution_time
- 0, // cached_cast_execution_time
- period,
- RtecScheduler::VERY_LOW_IMPORTANCE,
- 0, // quantum
- 1, // threads
- RtecScheduler::OPERATION,
- ACE_TRY_ENV);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- // Ignore exceptions..
- }
- ACE_ENDTRY;
-
- ACE_NEW (this->tasks_[i],
- TAO_EC_Dispatching_Task (&this->thread_manager_));
-
- // @@ Query the scheduler to obtain the priority...
- long flags = THR_BOUND | THR_SCHED_FIFO;
- if (this->tasks_[i]->activate (flags, 1, 1, priority) == -1)
- {
- flags = THR_BOUND;
- priority = ACE_Sched_Params::priority_min (ACE_SCHED_OTHER,
- ACE_SCOPE_THREAD);
- if (this->tasks_[i]->activate (flags, 1, 1, priority) == -1)
- ACE_ERROR ((LM_ERROR,
- "EC (%P|%t) cannot activate queue %d", i));
- }
- }
-}
-
-void
-TAO_EC_Priority_Dispatching::shutdown (void)
-{
- if (this->tasks_ == 0)
- return;
-
- for (int i = 0; i < this->ntasks_; ++i)
- this->tasks_[i]->putq (new TAO_EC_Shutdown_Command);
-
- this->thread_manager_.wait ();
-
- for (int j = 0; j < this->ntasks_; ++j)
- delete this->tasks_[j];
-
- delete[] this->tasks_;
- this->tasks_ = 0;
-}
-
-void
-TAO_EC_Priority_Dispatching::push (TAO_EC_ProxyPushSupplier* proxy,
- const RtecEventComm::EventSet& event,
- TAO_EC_QOS_Info& qos_info,
- CORBA::Environment& ACE_TRY_ENV)
-{
- RtecEventComm::EventSet event_copy = event;
- this->push_nocopy (proxy, event_copy, qos_info, ACE_TRY_ENV);
-}
-
-void
-TAO_EC_Priority_Dispatching::push_nocopy (TAO_EC_ProxyPushSupplier* proxy,
- RtecEventComm::EventSet& event,
- TAO_EC_QOS_Info& qos_info,
- CORBA::Environment &ACE_TRY_ENV)
-{
- if (this->tasks_ == 0)
- this->activate ();
-
- int i = qos_info.preemption_priority;
- if (i < 0 || i >= this->ntasks_)
- {
- // @@ Throw something?
- i = 0;
- }
-
-
- this->tasks_[i]->push (proxy, event, ACE_TRY_ENV);
-}