From 3692350c81ab489973852f5ad7d36a621396e22c Mon Sep 17 00:00:00 2001 From: coryan Date: Fri, 11 Jan 2002 01:48:49 +0000 Subject: ChangeLogTag:Thu Jan 10 17:43:22 2002 Carlos O'Ryan --- TAO/ChangeLogs/ChangeLog-02a | 34 + .../orbsvcs/Event/EC_RTCORBA_Dispatching.cpp | 105 +++ TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.h | 83 ++ .../orbsvcs/Event/EC_RTCORBA_Dispatching.inl | 1 + TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.cpp | 278 ++++++ TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.h | 122 +++ TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.inl | 1 + TAO/orbsvcs/orbsvcs/Makefile.RTCORBAEvent | 74 ++ .../EC_Colocated_Latency/Consumer.cpp | 115 +++ .../EC_Colocated_Latency/Consumer.h | 66 ++ .../EC_Colocated_Latency/Makefile | 957 +++++++++++++++++++++ .../EC_Colocated_Latency/POA_Destroyer.cpp | 28 + .../EC_Colocated_Latency/POA_Destroyer.h | 36 + .../EC_Colocated_Latency/POA_Destroyer.inl | 13 + .../EC_Colocated_Latency/Receive_Task.cpp | 33 + .../EC_Colocated_Latency/Receive_Task.h | 39 + .../EC_Colocated_Latency/Send_Task.cpp | 70 ++ .../EC_Colocated_Latency/Send_Task.h | 56 ++ .../EC_Colocated_Latency/Servant_var.cpp | 34 + .../EC_Colocated_Latency/Servant_var.h | 65 ++ .../EC_Colocated_Latency/Servant_var.inl | 77 ++ .../EC_Colocated_Latency/Supplier.cpp | 104 +++ .../EC_Colocated_Latency/Supplier.h | 59 ++ .../EC_Colocated_Latency/driver.cpp | 319 +++++++ .../ec.supplier_filter_null.conf | 2 + .../ec.supplier_filter_per_supplier.conf | 66 ++ .../EC_Colocated_Latency/run_supplier_filtering.sh | 10 + 27 files changed, 2847 insertions(+) create mode 100644 TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.cpp create mode 100644 TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.h create mode 100644 TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.inl create mode 100644 TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.cpp create mode 100644 TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.h create mode 100644 TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.inl create mode 100644 TAO/orbsvcs/orbsvcs/Makefile.RTCORBAEvent create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Consumer.cpp create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Consumer.h create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Makefile create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.cpp create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.h create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.inl create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Receive_Task.cpp create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Receive_Task.h create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Send_Task.cpp create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Send_Task.h create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.cpp create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.h create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.inl create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Supplier.cpp create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Supplier.h create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/driver.cpp create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/ec.supplier_filter_null.conf create mode 100644 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/ec.supplier_filter_per_supplier.conf create mode 100755 TAO/orbsvcs/performance-tests/EC_Colocated_Latency/run_supplier_filtering.sh diff --git a/TAO/ChangeLogs/ChangeLog-02a b/TAO/ChangeLogs/ChangeLog-02a index 1bb90f30299..934ba4e2f40 100644 --- a/TAO/ChangeLogs/ChangeLog-02a +++ b/TAO/ChangeLogs/ChangeLog-02a @@ -1,3 +1,37 @@ +Thu Jan 10 17:43:22 2002 Carlos O'Ryan + + * orbsvcs/orbsvcs/Makefile.RTCORBAEvent: + * orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.h: + * orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.inl: + * orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.cpp: + * orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.h: + * orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.inl: + * orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.cpp: + Add new dispatching strategy based on RT-CORBA. Still + work-in-progress. + + * orbsvcs/performance-tests/EC_Colocated_Latency/Makefile: + * orbsvcs/performance-tests/EC_Colocated_Latency/Consumer.h: + * orbsvcs/performance-tests/EC_Colocated_Latency/Consumer.cpp: + * orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.h: + * orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.inl: + * orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.cpp: + * orbsvcs/performance-tests/EC_Colocated_Latency/Receive_Task.h: + * orbsvcs/performance-tests/EC_Colocated_Latency/Receive_Task.cpp: + * orbsvcs/performance-tests/EC_Colocated_Latency/Send_Task.h: + * orbsvcs/performance-tests/EC_Colocated_Latency/Send_Task.cpp: + * orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.h: + * orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.inl: + * orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.cpp: + * orbsvcs/performance-tests/EC_Colocated_Latency/Supplier.h: + * orbsvcs/performance-tests/EC_Colocated_Latency/Supplier.cpp: + * orbsvcs/performance-tests/EC_Colocated_Latency/driver.cpp: + * orbsvcs/performance-tests/EC_Colocated_Latency/ec.supplier_filter_null.conf: + * orbsvcs/performance-tests/EC_Colocated_Latency/ec.supplier_filter_per_supplier.conf: + * orbsvcs/performance-tests/EC_Colocated_Latency/run_supplier_filtering.sh: + Add new performance test to measure latency in the colocated + case. + Thu Jan 10 12:48:02 2002 Venkita Subramonian * tests/Two_Objects/worker.cpp: diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.cpp b/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.cpp new file mode 100644 index 00000000000..8599a2632bc --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.cpp @@ -0,0 +1,105 @@ +// $Id$ + +#include "EC_RTCORBA_Dispatching.h" +#include "tao/RTCORBA/Priority_Mapping.h" + +#if ! defined (__ACE_INLINE__) +#include "EC_RTCORBA_Dispatching.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(Event, EC_RTCORBA_Dispatching, "$Id$") + +TAO_EC_RTCORBA_Dispatching:: + TAO_EC_RTCORBA_Dispatching (const RTCORBA::ThreadpoolLanes &lanes, + RTCORBA::PriorityMapping *mapping, + RTCORBA::Current_ptr current) + : lanes_ (lanes) + , priority_mapping_ (mapping) + , current_ (RTCORBA::Current::_duplicate (current)) +{ + ACE_NEW (this->tasks_, TAO_EC_Dispatching_Task[this->lanes_.length ()]); + for (CORBA::ULong i = 0; i != this->lanes_.length (); ++i) + this->tasks_->thr_mgr (&this->thread_manager_); +} + +TAO_EC_RTCORBA_Dispatching::~TAO_EC_RTCORBA_Dispatching (void) +{ + delete[] this->tasks_; +} + +void +TAO_EC_RTCORBA_Dispatching::activate (void) +{ + for (CORBA::ULong i = 0; i != this->lanes_.length (); ++i) + { + CORBA::ULong nthreads = this->lanes_[i].static_threads; + if (nthreads == 0) + { + nthreads = 1; + } + RTCORBA::Priority corba_priority = this->lanes_[i].lane_priority; + RTCORBA::NativePriority native_priority; + if (this->priority_mapping_->to_native (corba_priority, + native_priority) != 0) + { + this->tasks_[i].activate (THR_NEW_LWP | THR_JOINABLE, + nthreads, + 0, + native_priority); + } + } +} + +void +TAO_EC_RTCORBA_Dispatching::shutdown (void) +{ + for (CORBA::ULong i = 0; i != this->lanes_.length (); ++i) + { + int nthreads = + this->thread_manager_.num_threads_in_task (&this->tasks_[i]); + if (nthreads <= 0) + continue; + for (int j = 0; j != nthreads; ++j) + { + this->tasks_[i].putq (new TAO_EC_Shutdown_Task_Command); + } + } + this->thread_manager_.wait (); +} + +void +TAO_EC_RTCORBA_Dispatching::push (TAO_EC_ProxyPushSupplier* proxy, + RtecEventComm::PushConsumer_ptr consumer, + const RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info + TAO_ENV_ARG_DECL) +{ + RtecEventComm::EventSet event_copy = event; + this->push_nocopy (proxy, consumer, event_copy, qos_info TAO_ENV_ARG_PARAMETER); +} + +void +TAO_EC_RTCORBA_Dispatching::push_nocopy (TAO_EC_ProxyPushSupplier* proxy, + RtecEventComm::PushConsumer_ptr consumer, + RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& + TAO_ENV_ARG_DECL) +{ + RTCORBA::Priority current_priority = + this->current_->the_priority (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + for (CORBA::ULong i = 0; i != this->lanes_.length (); ++i) + { + if (this->lanes_[i].lane_priority != current_priority) + continue; + + // @@ If there were no threads available we may need to create + // some... + + this->tasks_[i].push (proxy, consumer, event + TAO_ENV_ARG_PARAMETER); + ACE_CHECK; + break; + } +} diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.h b/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.h new file mode 100644 index 00000000000..ab75cb13e33 --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.h @@ -0,0 +1,83 @@ +/* -*- C++ -*- */ +/** + * @file EC_RTCORBA_Dispatching.h + * + * $Id$ + * + * @author Carlos O'Ryan (coryan@cs.wustl.edu) + * + * Based on previous work by Tim Harrison (harrison@cs.wustl.edu) and + * other members of the DOC group. More details can be found in: + * + * http://doc.ece.uci.edu/~coryan/EC/index.html + */ + +#ifndef TAO_EC_RTCORBA_DISPATCHING_H +#define TAO_EC_RTCORBA_DISPATCHING_H +#include "ace/pre.h" + +#include "EC_Dispatching.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "EC_Dispatching_Task.h" +#include "tao/RTCORBA/RTCORBA.h" + +class TAO_EC_Event_Channel; + +/** + * @class TAO_EC_RTCORBA_Dispatching + * + * @brief RTCORBA-based dispatching strategy + * + */ +class TAO_RTEvent_Export TAO_EC_RTCORBA_Dispatching : public TAO_EC_Dispatching +{ +public: + /// Constructor + TAO_EC_RTCORBA_Dispatching (const RTCORBA::ThreadpoolLanes &lanes, + RTCORBA::PriorityMapping *mapping, + RTCORBA::Current_ptr current); + + /// Destructor + ~TAO_EC_RTCORBA_Dispatching (void); + + // = The EC_Dispatching methods. + virtual void activate (void); + virtual void shutdown (void); + virtual void push (TAO_EC_ProxyPushSupplier* proxy, + RtecEventComm::PushConsumer_ptr consumer, + const RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info + TAO_ENV_ARG_DECL); + virtual void push_nocopy (TAO_EC_ProxyPushSupplier* proxy, + RtecEventComm::PushConsumer_ptr consumer, + RtecEventComm::EventSet& event, + TAO_EC_QOS_Info& qos_info + TAO_ENV_ARG_DECL); + +private: + /// The thread pools... + RTCORBA::ThreadpoolLanes lanes_; + + /// Used to map between CORBA and native priorities + RTCORBA::PriorityMapping *priority_mapping_; + + /// Used to get the current RTCORBA priority + RTCORBA::Current_var current_; + + /// Use our own thread manager. + ACE_Thread_Manager thread_manager_; + + /// The dispatching task(s), one per lane + TAO_EC_Dispatching_Task *tasks_; +}; + +#if defined (__ACE_INLINE__) +#include "EC_RTCORBA_Dispatching.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/post.h" +#endif /* TAO_EC_RTCORBA_DISPATCHING_H */ diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.inl b/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.inl new file mode 100644 index 00000000000..cfa1da318d3 --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Dispatching.inl @@ -0,0 +1 @@ +// $Id$ diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.cpp b/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.cpp new file mode 100644 index 00000000000..ffeaf1d754f --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.cpp @@ -0,0 +1,278 @@ +// $Id$ + +#include "EC_RTCORBA_Factory.h" +#include "EC_RTCORBA_Dispatching.h" + +#include "tao/RTCORBA/Priority_Mapping_Manager.h" + +#if ! defined (__ACE_INLINE__) +#include "EC_RTCORBA_Factory.inl" +#endif /* __ACE_INLINE__ */ + +ACE_RCSID(Event, EC_RTCORBA_Factory, "$Id$") + +TAO_EC_RTCORBA_Factory:: + TAO_EC_RTCORBA_Factory (TAO_EC_Factory *body, + const RTCORBA::ThreadpoolLanes &lanes) + : body_ (body) + , lanes_ (lanes) +{ +} + +TAO_EC_RTCORBA_Factory::~TAO_EC_RTCORBA_Factory (void) +{ +} + + +int +TAO_EC_RTCORBA_Factory::init (int argc, char* argv[]) +{ + return this->body_->init (argc, argv); +} + +int +TAO_EC_RTCORBA_Factory::fini (void) +{ + return this->body_->fini (); +} + +// **************************************************************** + +TAO_EC_Dispatching* +TAO_EC_RTCORBA_Factory::create_dispatching (TAO_EC_Event_Channel *) +{ + TAO_EC_Dispatching *dispatching = 0; + ACE_DECLARE_NEW_CORBA_ENV; + ACE_TRY + { + // @@ The ORBId could be important!!! + int argc = 0; + CORBA::ORB_var orb = + CORBA::ORB_init (argc, 0, "" + TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::Object_var obj = + orb->resolve_initial_references ("PriorityMappingManager" + TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + RTCORBA::PriorityMappingManager_var priority_mapping_manager = + RTCORBA::PriorityMappingManager::_narrow (obj.in () + TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + RTCORBA::PriorityMapping *priority_mapping = + priority_mapping_manager->mapping (); + + obj = + orb->resolve_initial_references ("RTCurrent" + TAO_ENV_ARG_PARAMETER); + RTCORBA::Current_var current = + RTCORBA::Current::_narrow (obj.in () + TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + ACE_NEW_RETURN (dispatching, + TAO_EC_RTCORBA_Dispatching (this->lanes_, + priority_mapping, + current.in ()), + 0); + } + ACE_CATCHANY + { + } + ACE_ENDTRY; + + return dispatching; +} + +void +TAO_EC_RTCORBA_Factory::destroy_dispatching (TAO_EC_Dispatching *x) +{ + return this->body_->destroy_dispatching (x); +} + +TAO_EC_Filter_Builder* +TAO_EC_RTCORBA_Factory::create_filter_builder (TAO_EC_Event_Channel *ec) +{ + return this->body_->create_filter_builder (ec); +} + +void +TAO_EC_RTCORBA_Factory::destroy_filter_builder (TAO_EC_Filter_Builder *x) +{ + return this->body_->destroy_filter_builder (x); +} + +TAO_EC_Supplier_Filter_Builder* +TAO_EC_RTCORBA_Factory::create_supplier_filter_builder (TAO_EC_Event_Channel *ec) +{ + return this->body_->create_supplier_filter_builder (ec); +} + +void +TAO_EC_RTCORBA_Factory::destroy_supplier_filter_builder (TAO_EC_Supplier_Filter_Builder *x) +{ + return this->body_->destroy_supplier_filter_builder (x); +} + +TAO_EC_ConsumerAdmin* +TAO_EC_RTCORBA_Factory::create_consumer_admin (TAO_EC_Event_Channel *ec) +{ + return this->body_->create_consumer_admin (ec); +} + +void +TAO_EC_RTCORBA_Factory::destroy_consumer_admin (TAO_EC_ConsumerAdmin *x) +{ + return this->body_->destroy_consumer_admin (x); +} + +TAO_EC_SupplierAdmin* +TAO_EC_RTCORBA_Factory::create_supplier_admin (TAO_EC_Event_Channel *ec) +{ + return this->body_->create_supplier_admin (ec); +} + +void +TAO_EC_RTCORBA_Factory::destroy_supplier_admin (TAO_EC_SupplierAdmin *x) +{ + return this->body_->destroy_supplier_admin (x); +} + +TAO_EC_ProxyPushSupplier* +TAO_EC_RTCORBA_Factory::create_proxy_push_supplier (TAO_EC_Event_Channel *ec) +{ + return this->body_->create_proxy_push_supplier (ec); +} + +void +TAO_EC_RTCORBA_Factory::destroy_proxy_push_supplier (TAO_EC_ProxyPushSupplier *x) +{ + return this->body_->destroy_proxy_push_supplier (x); +} + +TAO_EC_ProxyPushConsumer* +TAO_EC_RTCORBA_Factory::create_proxy_push_consumer (TAO_EC_Event_Channel *ec) +{ + return this->body_->create_proxy_push_consumer (ec); +} + +void +TAO_EC_RTCORBA_Factory::destroy_proxy_push_consumer (TAO_EC_ProxyPushConsumer *x) +{ + return this->body_->destroy_proxy_push_consumer (x); +} + +TAO_EC_Timeout_Generator* +TAO_EC_RTCORBA_Factory::create_timeout_generator (TAO_EC_Event_Channel *ec) +{ + return this->body_->create_timeout_generator (ec); +} + +void +TAO_EC_RTCORBA_Factory::destroy_timeout_generator (TAO_EC_Timeout_Generator *x) +{ + return this->body_->destroy_timeout_generator (x); +} + +TAO_EC_ObserverStrategy* +TAO_EC_RTCORBA_Factory::create_observer_strategy (TAO_EC_Event_Channel *ec) +{ + return this->body_->create_observer_strategy (ec); +} + +void +TAO_EC_RTCORBA_Factory::destroy_observer_strategy (TAO_EC_ObserverStrategy *x) +{ + return this->body_->destroy_observer_strategy (x); +} + +TAO_EC_Scheduling_Strategy* +TAO_EC_RTCORBA_Factory::create_scheduling_strategy (TAO_EC_Event_Channel *ec) +{ + return this->body_->create_scheduling_strategy (ec); +} + +void +TAO_EC_RTCORBA_Factory::destroy_scheduling_strategy (TAO_EC_Scheduling_Strategy* x) +{ + return this->body_->destroy_scheduling_strategy (x); +} + +TAO_EC_ProxyPushConsumer_Collection* +TAO_EC_RTCORBA_Factory::create_proxy_push_consumer_collection (TAO_EC_Event_Channel *ec) +{ + return this->body_->create_proxy_push_consumer_collection (ec); +} + +void +TAO_EC_RTCORBA_Factory::destroy_proxy_push_consumer_collection (TAO_EC_ProxyPushConsumer_Collection *x) +{ + return this->body_->destroy_proxy_push_consumer_collection (x); +} + +TAO_EC_ProxyPushSupplier_Collection* +TAO_EC_RTCORBA_Factory::create_proxy_push_supplier_collection (TAO_EC_Event_Channel *ec) +{ + return this->body_->create_proxy_push_supplier_collection (ec); +} + +void +TAO_EC_RTCORBA_Factory::destroy_proxy_push_supplier_collection (TAO_EC_ProxyPushSupplier_Collection *x) +{ + return this->body_->destroy_proxy_push_supplier_collection (x); +} + +ACE_Lock* +TAO_EC_RTCORBA_Factory::create_consumer_lock (void) +{ + return this->body_->create_consumer_lock (); +} + +void +TAO_EC_RTCORBA_Factory::destroy_consumer_lock (ACE_Lock* x) +{ + return this->body_->destroy_consumer_lock (x); +} + +ACE_Lock* +TAO_EC_RTCORBA_Factory::create_supplier_lock (void) +{ + return this->body_->create_supplier_lock (); +} + +void +TAO_EC_RTCORBA_Factory::destroy_supplier_lock (ACE_Lock* x) +{ + return this->body_->destroy_supplier_lock (x); +} + +TAO_EC_ConsumerControl* +TAO_EC_RTCORBA_Factory::create_consumer_control (TAO_EC_Event_Channel* ec) +{ + return this->body_->create_consumer_control (ec); +} + +void +TAO_EC_RTCORBA_Factory::destroy_consumer_control (TAO_EC_ConsumerControl* x) +{ + return this->body_->destroy_consumer_control (x); +} + +TAO_EC_SupplierControl* +TAO_EC_RTCORBA_Factory::create_supplier_control (TAO_EC_Event_Channel* ec) +{ + return this->body_->create_supplier_control (ec); +} + +void +TAO_EC_RTCORBA_Factory::destroy_supplier_control (TAO_EC_SupplierControl* x) +{ + return this->body_->destroy_supplier_control (x); +} + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) +#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.h b/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.h new file mode 100644 index 00000000000..6c79ca45cae --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.h @@ -0,0 +1,122 @@ +/* -*- C++ -*- */ +/** + * @file EC_RTCORBA_Factory.h + * + * $Id$ + * + * @author Carlos O'Ryan (coryan@cs.wustl.edu) + * + * Based on previous work by Tim Harrison (harrison@cs.wustl.edu) and + * other members of the DOC group. More details can be found in: + * + * http://doc.ece.uci.edu/~coryan/EC/index.html + */ + +#ifndef TAO_EC_RTCORBA_FACTORY_H +#define TAO_EC_RTCORBA_FACTORY_H +#include "ace/pre.h" + +#include "EC_Factory.h" +#include "tao/RTCORBA/RTCORBA.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +/** + * @class TAO_EC_RTCORBA_Factory + * + * @brief Decorate an EC_Factory to use the EC_RTCORBA_Dispatching + * module. + */ +class TAO_RTEvent_Export TAO_EC_RTCORBA_Factory : public TAO_EC_Factory +{ +public: + /// Constructor + /** + * @param body The decorated factory. + */ + TAO_EC_RTCORBA_Factory (TAO_EC_Factory *body, + const RTCORBA::ThreadpoolLanes &lanes); + + /// destructor... + virtual ~TAO_EC_RTCORBA_Factory (void); + + // Decorated methods... + virtual int init (int argc, char* argv[]); + virtual int fini (void); + virtual TAO_EC_Dispatching* + create_dispatching (TAO_EC_Event_Channel*); + virtual void + destroy_dispatching (TAO_EC_Dispatching*) ; + virtual TAO_EC_Filter_Builder* + create_filter_builder (TAO_EC_Event_Channel*) ; + virtual void + destroy_filter_builder (TAO_EC_Filter_Builder*); + virtual TAO_EC_Supplier_Filter_Builder* + create_supplier_filter_builder (TAO_EC_Event_Channel*) ; + virtual void + destroy_supplier_filter_builder (TAO_EC_Supplier_Filter_Builder*); + virtual TAO_EC_ConsumerAdmin* + create_consumer_admin (TAO_EC_Event_Channel*) ; + virtual void + destroy_consumer_admin (TAO_EC_ConsumerAdmin*); + virtual TAO_EC_SupplierAdmin* + create_supplier_admin (TAO_EC_Event_Channel*) ; + virtual void + destroy_supplier_admin (TAO_EC_SupplierAdmin*); + virtual TAO_EC_ProxyPushSupplier* + create_proxy_push_supplier (TAO_EC_Event_Channel*); + virtual void + destroy_proxy_push_supplier (TAO_EC_ProxyPushSupplier*); + virtual TAO_EC_ProxyPushConsumer* + create_proxy_push_consumer (TAO_EC_Event_Channel*); + virtual void + destroy_proxy_push_consumer (TAO_EC_ProxyPushConsumer*); + virtual TAO_EC_Timeout_Generator* + create_timeout_generator (TAO_EC_Event_Channel*) ; + virtual void + destroy_timeout_generator (TAO_EC_Timeout_Generator*); + virtual TAO_EC_ObserverStrategy* + create_observer_strategy (TAO_EC_Event_Channel*); + virtual void + destroy_observer_strategy (TAO_EC_ObserverStrategy*); + virtual TAO_EC_Scheduling_Strategy* + create_scheduling_strategy (TAO_EC_Event_Channel*); + virtual void + destroy_scheduling_strategy (TAO_EC_Scheduling_Strategy*); + virtual TAO_EC_ProxyPushConsumer_Collection* + create_proxy_push_consumer_collection (TAO_EC_Event_Channel*); + virtual void + destroy_proxy_push_consumer_collection (TAO_EC_ProxyPushConsumer_Collection*); + virtual TAO_EC_ProxyPushSupplier_Collection* + create_proxy_push_supplier_collection (TAO_EC_Event_Channel*); + virtual void + destroy_proxy_push_supplier_collection (TAO_EC_ProxyPushSupplier_Collection*); + virtual ACE_Lock* create_consumer_lock (void); + virtual void destroy_consumer_lock (ACE_Lock*); + virtual ACE_Lock* create_supplier_lock (void); + virtual void destroy_supplier_lock (ACE_Lock*); + virtual TAO_EC_ConsumerControl* + create_consumer_control (TAO_EC_Event_Channel*); + virtual void + destroy_consumer_control (TAO_EC_ConsumerControl*); + virtual TAO_EC_SupplierControl* + create_supplier_control (TAO_EC_Event_Channel*); + virtual void + destroy_supplier_control (TAO_EC_SupplierControl*); + +protected: + /// The decorated factory + TAO_EC_Factory *body_; + + /// Configure the thread pool lanes. + RTCORBA::ThreadpoolLanes lanes_; +}; + +#if defined (__ACE_INLINE__) +#include "EC_RTCORBA_Factory.inl" +#endif /* __ACE_INLINE__ */ + +#include "ace/post.h" +#endif /* TAO_EC_RTCORBA_FACTORY_H */ diff --git a/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.inl b/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.inl new file mode 100644 index 00000000000..cfa1da318d3 --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/Event/EC_RTCORBA_Factory.inl @@ -0,0 +1 @@ +// $Id$ diff --git a/TAO/orbsvcs/orbsvcs/Makefile.RTCORBAEvent b/TAO/orbsvcs/orbsvcs/Makefile.RTCORBAEvent new file mode 100644 index 00000000000..f4ace227684 --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/Makefile.RTCORBAEvent @@ -0,0 +1,74 @@ +#---------------------------------------------------------------------------- +# +# $Id$ +# +#---------------------------------------------------------------------------- +ifndef TAO_ROOT + TAO_ROOT = $(ACE_ROOT)/TAO +endif # ! TAO_ROOT + +MAKEFILE = Makefile.RTCORBAEvent +LIBNAME = libTAO_RTCORBAEvent +LIB = $(LIBNAME).a +SHLIB = $(LIBNAME).$(SOEXT) + +VPATH=.:Event + +ACE_SHLIBS = -lTAO_RTEvent -lTAO_CosNaming -lTAO_Svc_Utils -lTAO_RTPortableServer -lTAO_PortableServer -lTAO_RTCORBA -lTAO -lACE + +#---------------------------------------------------------------------------- +# Include macros and targets +#---------------------------------------------------------------------------- + +include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU +include $(TAO_ROOT)/rules.tao.GNU + +# On non-Windows environment, we should at least define +# the export_include IDL flag. +override TAO_IDLFLAGS += + +IDL_FILES += + +CPP_SRCS += \ + Event/EC_RTCORBA_Dispatching \ + Event/EC_RTCORBA_Factory \ + +IDL_SRC = \ + $(addsuffix S.cpp, $(IDL_FILES)) \ + $(addsuffix C.cpp, $(IDL_FILES)) +FILES = $(CPP_SRCS) +DEFS = $(addsuffix .h,$(FILES)) +LSRC = $(addsuffix .cpp,$(FILES)) $(IDL_SRC) + +include $(ACE_ROOT)/include/makeinclude/macros.GNU +include $(ACE_ROOT)/include/makeinclude/rules.common.GNU +include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU +include $(ACE_ROOT)/include/makeinclude/rules.lib.GNU +include $(ACE_ROOT)/include/makeinclude/rules.bin.GNU +include $(ACE_ROOT)/include/makeinclude/rules.local.GNU + +#---------------------------------------------------------------------------- +# Local targets (and local hacks) +#---------------------------------------------------------------------------- + +LDFLAGS += -L$(TAO_ROOT)/tao -L$(TAO_ROOT)/orbsvcs/orbsvcs +CPPFLAGS += -I$(TAO_ROOT) -I$(TAO_ROOT)/orbsvcs \ + -I$(TAO_ROOT)/orbsvcs/orbsvcs/ESF + +# +# Extra dependencies not caught by make depend. +# + +.PRECIOUS: $(foreach file, $(IDL_FILES), $(foreach ext, $(IDL_EXT), $(file)$(ext)))) + +realclean: clean + -$(RM) $(foreach file, $(IDL_FILES), $(foreach ext, $(IDL_EXT), $(file)$(ext))) + +#---------------------------------------------------------------------------- +# Dependencies +#---------------------------------------------------------------------------- + +# DO NOT DELETE THIS LINE -- g++dep uses it. +# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. + +# IF YOU PUT ANYTHING HERE IT WILL GO AWAY diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Consumer.cpp b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Consumer.cpp new file mode 100644 index 00000000000..2110f1b4821 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Consumer.cpp @@ -0,0 +1,115 @@ +/** + * @file Consumer.cpp + * + * $Id$ + * + * @author Carlos O'Ryan + */ + +#include "Consumer.h" +#include "orbsvcs/Event_Service_Constants.h" + +ACE_RCSID(EC_Colocated_Latency, Consumer, "$Id$") + +ECCL_Consumer::ECCL_Consumer (int iterations) + : sample_history_ (iterations) +{ +} + +void +ECCL_Consumer::connect (RtecEventChannelAdmin::EventChannel_ptr ec, + int event_type + TAO_ENV_ARG_DECL) +{ + RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin = + ec->for_consumers (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + { + ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_); + if (!CORBA::is_nil (this->proxy_supplier_.in ())) + return; + + this->proxy_supplier_ = + consumer_admin->obtain_push_supplier (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + } + + RtecEventComm::PushConsumer_var consumer = + this->_this (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + RtecEventChannelAdmin::ConsumerQOS consumer_qos; + consumer_qos.dependencies.length (2); + RtecEventComm::EventHeader& h0 = + consumer_qos.dependencies[0].event.header; + h0.type = ACE_ES_DISJUNCTION_DESIGNATOR; + h0.source = 1; // This time it means "number of disjunctions" + + RtecEventComm::EventHeader& h1 = + consumer_qos.dependencies[1].event.header; + h1.type = event_type; + h1.source = ACE_ES_EVENT_SOURCE_ANY; + + this->proxy_supplier_->connect_push_consumer (consumer.in (), + consumer_qos + TAO_ENV_ARG_PARAMETER); + ACE_CHECK; +} + +void +ECCL_Consumer::disconnect (TAO_ENV_SINGLE_ARG_DECL) +{ + RtecEventChannelAdmin::ProxyPushSupplier_var proxy; + { + ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_); + if (CORBA::is_nil (this->proxy_supplier_.in ())) + return; + proxy = this->proxy_supplier_._retn (); + } + + ACE_TRY + { + proxy->disconnect_push_supplier (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCHANY {} ACE_ENDTRY; + + PortableServer::POA_var poa = this->_default_POA (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + PortableServer::ObjectId_var id = poa->servant_to_id (this + TAO_ENV_ARG_PARAMETER); + ACE_CHECK; + poa->deactivate_object (id.in () TAO_ENV_ARG_PARAMETER); + ACE_CHECK; +} + +ACE_Sample_History & +ECCL_Consumer::sample_history (void) +{ + return this->sample_history_; +} + +void +ECCL_Consumer::push (const RtecEventComm::EventSet &events + TAO_ENV_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ACE_hrtime_t now = ACE_OS::gethrtime (); + + ACE_hrtime_t creation; + ORBSVCS_Time::TimeT_to_hrtime (creation, + events[0].header.creation_time); + + ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_); + this->sample_history_.sample (now - creation); +} + +void +ECCL_Consumer::disconnect_push_consumer (TAO_ENV_SINGLE_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_); + this->proxy_supplier_ = + RtecEventChannelAdmin::ProxyPushSupplier::_nil (); +} diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Consumer.h b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Consumer.h new file mode 100644 index 00000000000..5fe9f00fce7 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Consumer.h @@ -0,0 +1,66 @@ +/** + * @file Consumer.h + * + * $Id$ + * + */ + +#ifndef ECCL_CONSUMER_H +#define ECCL_CONSUMER_H + +#include "orbsvcs/RtecEventCommS.h" +#include "orbsvcs/RtecEventChannelAdminC.h" +#include "ace/Sample_History.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +/** + * @class ECCL_Consumer + * + * @brief Implement a simple consumer to keep track of the latency + * + */ +class ECCL_Consumer + : public virtual POA_RtecEventComm::PushConsumer + , public virtual PortableServer::RefCountServantBase + +{ +public: + /// Constructor + ECCL_Consumer (int iterations); + + /// Connect to the event channel + void connect (RtecEventChannelAdmin::EventChannel_ptr ec, + int event_type + TAO_ENV_ARG_DECL); + + /// Disconnect from the event channel + void disconnect (TAO_ENV_SINGLE_ARG_DECL); + + /// Access the history of samples + ACE_Sample_History &sample_history (void); + + //@{ + /** @name The RtecEventComm::PushConsumer methods + */ + virtual void push (const RtecEventComm::EventSet& events + TAO_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)); + virtual void disconnect_push_consumer (TAO_ENV_SINGLE_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)); + //@} + +private: + /// Synchronize access to the internal data + TAO_SYNCH_MUTEX mutex_; + + /// The proxy this object is connected to + RtecEventChannelAdmin::ProxyPushSupplier_var proxy_supplier_; + + /// The history of latency samples + ACE_Sample_History sample_history_; +}; + +#endif /* ECCL_CONSUMER_H */ diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Makefile b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Makefile new file mode 100644 index 00000000000..11f31c42037 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Makefile @@ -0,0 +1,957 @@ +# +# $Id$ +# + +LDLIBS = -lTAO_RTEvent -lTAO_CosNaming -lTAO_Svc_Utils -lTAO_IORTable -lTAO_PortableServer -lTAO_Strategies -lTAO + +ifndef TAO_ROOT + TAO_ROOT = $(ACE_ROOT)/TAO +endif + +CPPFLAGS += -I$(TAO_ROOT)/orbsvcs \ + -I$(TAO_ROOT) + +BIN_UNCHECKED = driver + +driver_OBJS=$(addsuffix .o,driver Consumer Supplier Receive_Task Send_Task POA_Destroyer) +SRC = $(driver_OBJS:.o=.cpp) + +#---------------------------------------------------------------------------- +# Include macros and targets +#---------------------------------------------------------------------------- + +include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU +include $(ACE_ROOT)/include/makeinclude/macros.GNU +include $(TAO_ROOT)/rules.tao.GNU + +#### If the TAO orbsvcs library wasn't built with sufficient components, +#### don't try to build here. +TAO_ORBSVCS := $(shell sh $(ACE_ROOT)/bin/ace_components --orbsvcs) +ifeq (RTEvent,$(findstring RTEvent,$(TAO_ORBSVCS))) + ifeq ($(corba_messaging),1) + BIN=$(BIN_UNCHECKED) + endif # corba_messaging +endif # RTEvent + +include $(ACE_ROOT)/include/makeinclude/rules.common.GNU +include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU +include $(ACE_ROOT)/include/makeinclude/rules.local.GNU + +#---------------------------------------------------------------------------- +# Local targets +#---------------------------------------------------------------------------- + +driver: $(addprefix $(VDIR),$(driver_OBJS)) + $(LINK.cc) $(LDFLAGS) -o $@ $^ $(VLDLIBS) $(POSTLINK) + +#---------------------------------------------------------------------------- +# Dependencies +#---------------------------------------------------------------------------- + +# DO NOT DELETE THIS LINE -- g++dep uses it. +# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. + + +.obj/driver.o .obj/driver.so .shobj/driver.o .shobj/driver.so: driver.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Event/EC_Default_Factory.h \ + $(ACE_ROOT)/ace/pre.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Event/EC_Factory.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Event/event_export.h \ + $(ACE_ROOT)/ace/post.h \ + $(ACE_ROOT)/ace/ACE_export.h \ + $(ACE_ROOT)/ace/svc_export.h \ + $(ACE_ROOT)/ace/ace_wchar.h \ + $(ACE_ROOT)/ace/ace_wchar.inl \ + $(ACE_ROOT)/ace/OS_Errno.h \ + $(ACE_ROOT)/ace/OS_Export.h \ + $(TAO_ROOT)/tao/corba.h \ + $(TAO_ROOT)/tao/corbafwd.h \ + $(ACE_ROOT)/ace/CDR_Base.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/OS_Dirent.h \ + $(ACE_ROOT)/ace/OS_String.h \ + $(ACE_ROOT)/ace/OS_Memory.h \ + $(ACE_ROOT)/ace/OS_TLI.h \ + $(ACE_ROOT)/ace/Default_Constants.h \ + $(ACE_ROOT)/ace/Global_Macros.h \ + $(ACE_ROOT)/ace/Min_Max.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Flag_Manip.h \ + $(ACE_ROOT)/ace/Flag_Manip.i \ + $(ACE_ROOT)/ace/Handle_Ops.h \ + $(ACE_ROOT)/ace/Handle_Ops.i \ + $(ACE_ROOT)/ace/Lib_Find.h \ + $(ACE_ROOT)/ace/Lib_Find.i \ + $(ACE_ROOT)/ace/Init_ACE.h \ + $(ACE_ROOT)/ace/Init_ACE.i \ + $(ACE_ROOT)/ace/Sock_Connect.h \ + $(ACE_ROOT)/ace/Sock_Connect.i \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.h \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Malloc_Allocator.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Unbounded_Set.h \ + $(ACE_ROOT)/ace/Node.h \ + $(ACE_ROOT)/ace/Node.cpp \ + $(ACE_ROOT)/ace/Unbounded_Set.cpp \ + $(ACE_ROOT)/ace/Unbounded_Set.inl \ + $(ACE_ROOT)/ace/Message_Block_T.h \ + $(ACE_ROOT)/ace/Message_Block_T.cpp \ + $(ACE_ROOT)/ace/Message_Block_T.i \ + $(TAO_ROOT)/tao/try_macros.h \ + $(TAO_ROOT)/tao/orbconf.h \ + $(ACE_ROOT)/ace/CORBA_macros.h \ + $(TAO_ROOT)/tao/varbase.h \ + $(TAO_ROOT)/tao/TAO_Export.h \ + $(TAO_ROOT)/tao/Typecode.h \ + $(TAO_ROOT)/tao/Exception.h \ + $(ACE_ROOT)/ace/SString.h \ + $(ACE_ROOT)/ace/String_Base.h \ + $(ACE_ROOT)/ace/String_Base_Const.h \ + $(ACE_ROOT)/ace/String_Base.cpp \ + $(ACE_ROOT)/ace/Auto_Ptr.h \ + $(ACE_ROOT)/ace/Auto_Ptr.cpp \ + $(ACE_ROOT)/ace/Auto_Ptr.i \ + $(ACE_ROOT)/ace/String_Base.i \ + $(TAO_ROOT)/tao/Any.h \ + $(TAO_ROOT)/tao/CDR.h \ + $(ACE_ROOT)/ace/CDR_Stream.h \ + $(TAO_ROOT)/tao/Environment.h \ + $(TAO_ROOT)/tao/Object.h \ + $(TAO_ROOT)/tao/Object_Proxy_Broker.h \ + $(TAO_ROOT)/tao/Object_Proxy_Impl.h \ + $(TAO_ROOT)/tao/NVList.h \ + $(ACE_ROOT)/ace/Unbounded_Queue.h \ + $(ACE_ROOT)/ace/Unbounded_Queue.cpp \ + $(ACE_ROOT)/ace/Unbounded_Queue.inl \ + $(TAO_ROOT)/tao/LocalObject.h \ + $(TAO_ROOT)/tao/Principal.h \ + $(TAO_ROOT)/tao/OctetSeqC.h \ + $(TAO_ROOT)/tao/Sequence.h \ + $(TAO_ROOT)/tao/Managed_Types.h \ + $(TAO_ROOT)/tao/Sequence_T.h \ + $(TAO_ROOT)/tao/Sequence_T.cpp \ + $(TAO_ROOT)/tao/Sequence_T.i \ + $(TAO_ROOT)/tao/ORB.h \ + $(TAO_ROOT)/tao/Services.h \ + $(TAO_ROOT)/tao/CORBA_String.h \ + $(TAO_ROOT)/tao/PolicyC.h \ + $(TAO_ROOT)/tao/Encodable.h \ + $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \ + $(TAO_ROOT)/tao/CurrentC.h \ + $(TAO_ROOT)/tao/BoundsC.h \ + $(TAO_ROOT)/tao/ValueBase.h \ + $(TAO_ROOT)/tao/ValueFactory.h \ + $(TAO_ROOT)/tao/DomainC.h \ + $(TAO_ROOT)/tao/WrongTransactionC.h \ + $(TAO_ROOT)/tao/Object_KeyC.h \ + $(TAO_ROOT)/tao/ObjectIDList.h \ + $(TAO_ROOT)/tao/StringSeqC.h \ + $(TAO_ROOT)/tao/PortableInterceptorC.h \ + $(TAO_ROOT)/tao/DynamicC.h \ + $(TAO_ROOT)/tao/MessagingC.h \ + $(TAO_ROOT)/tao/TimeBaseC.h \ + $(TAO_ROOT)/tao/SmartProxies/Smart_Proxies.h \ + $(TAO_ROOT)/tao/SmartProxies/smartproxies_export.h \ + $(TAO_ROOT)/tao/TAO_Singleton.h \ + $(TAO_ROOT)/tao/TAO_Singleton.cpp \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \ + $(TAO_ROOT)/tao/TAO_Singleton.inl \ + $(TAO_ROOT)/tao/IOPC.h \ + $(TAO_ROOT)/tao/PollableC.h \ + $(ACE_ROOT)/ace/Service_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Event/EC_Defaults.h \ + $(ACE_ROOT)/ace/Service_Config.h \ + $(ACE_ROOT)/ace/Reactor.h \ + $(ACE_ROOT)/ace/Handle_Set.h \ + $(ACE_ROOT)/ace/Timer_Queue.h \ + $(ACE_ROOT)/ace/Timer_Queue_T.h \ + $(ACE_ROOT)/ace/Test_and_Set.h \ + $(ACE_ROOT)/ace/Test_and_Set.cpp \ + $(ACE_ROOT)/ace/Timer_Queue_T.cpp \ + $(ACE_ROOT)/ace/Timer_Queue_T.i \ + $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Event/EC_Event_Channel.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS.h \ + $(TAO_ROOT)/tao/TimeBaseS.h \ + $(TAO_ROOT)/tao/TimeBaseS_T.h \ + $(TAO_ROOT)/tao/TimeBaseS_T.cpp \ + $(TAO_ROOT)/tao/TimeBaseS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/svc_utils_export.h \ + $(TAO_ROOT)/tao/PortableServer/PortableServer.h \ + $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \ + $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \ + $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \ + $(TAO_ROOT)/tao/Abstract_Servant_Base.h \ + $(ACE_ROOT)/ace/Atomic_Op.h \ + $(ACE_ROOT)/ace/Atomic_Op.cpp \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \ + $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \ + $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecBaseS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecBaseC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecBaseS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecBaseS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecBaseS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminS_T.i \ + $(TAO_ROOT)/tao/Messaging.h \ + $(ACE_ROOT)/ace/Get_Opt.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Array_Base.h \ + $(ACE_ROOT)/ace/Array_Base.cpp \ + $(ACE_ROOT)/ace/Array_Base.inl \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Sched_Params.h + +.obj/Consumer.o .obj/Consumer.so .shobj/Consumer.o .shobj/Consumer.so: Consumer.cpp Consumer.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS.h \ + $(ACE_ROOT)/ace/pre.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS.h \ + $(TAO_ROOT)/tao/TimeBaseS.h \ + $(TAO_ROOT)/tao/TimeBaseC.h \ + $(TAO_ROOT)/tao/corbafwd.h \ + $(ACE_ROOT)/ace/CDR_Base.h \ + $(ACE_ROOT)/ace/post.h \ + $(ACE_ROOT)/ace/ACE_export.h \ + $(ACE_ROOT)/ace/svc_export.h \ + $(ACE_ROOT)/ace/ace_wchar.h \ + $(ACE_ROOT)/ace/ace_wchar.inl \ + $(ACE_ROOT)/ace/OS_Errno.h \ + $(ACE_ROOT)/ace/OS_Export.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/OS_Dirent.h \ + $(ACE_ROOT)/ace/OS_String.h \ + $(ACE_ROOT)/ace/OS_Memory.h \ + $(ACE_ROOT)/ace/OS_TLI.h \ + $(ACE_ROOT)/ace/Default_Constants.h \ + $(ACE_ROOT)/ace/Global_Macros.h \ + $(ACE_ROOT)/ace/Min_Max.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Flag_Manip.h \ + $(ACE_ROOT)/ace/Flag_Manip.i \ + $(ACE_ROOT)/ace/Handle_Ops.h \ + $(ACE_ROOT)/ace/Handle_Ops.i \ + $(ACE_ROOT)/ace/Lib_Find.h \ + $(ACE_ROOT)/ace/Lib_Find.i \ + $(ACE_ROOT)/ace/Init_ACE.h \ + $(ACE_ROOT)/ace/Init_ACE.i \ + $(ACE_ROOT)/ace/Sock_Connect.h \ + $(ACE_ROOT)/ace/Sock_Connect.i \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.h \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Malloc_Allocator.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Unbounded_Set.h \ + $(ACE_ROOT)/ace/Node.h \ + $(ACE_ROOT)/ace/Node.cpp \ + $(ACE_ROOT)/ace/Unbounded_Set.cpp \ + $(ACE_ROOT)/ace/Unbounded_Set.inl \ + $(ACE_ROOT)/ace/Message_Block_T.h \ + $(ACE_ROOT)/ace/Message_Block_T.cpp \ + $(ACE_ROOT)/ace/Message_Block_T.i \ + $(TAO_ROOT)/tao/try_macros.h \ + $(TAO_ROOT)/tao/orbconf.h \ + $(ACE_ROOT)/ace/CORBA_macros.h \ + $(TAO_ROOT)/tao/varbase.h \ + $(TAO_ROOT)/tao/TAO_Export.h \ + $(TAO_ROOT)/tao/CDR.h \ + $(ACE_ROOT)/ace/CDR_Stream.h \ + $(ACE_ROOT)/ace/SString.h \ + $(ACE_ROOT)/ace/String_Base.h \ + $(ACE_ROOT)/ace/String_Base_Const.h \ + $(ACE_ROOT)/ace/String_Base.cpp \ + $(ACE_ROOT)/ace/Auto_Ptr.h \ + $(ACE_ROOT)/ace/Auto_Ptr.cpp \ + $(ACE_ROOT)/ace/Auto_Ptr.i \ + $(ACE_ROOT)/ace/String_Base.i \ + $(TAO_ROOT)/tao/Any.h \ + $(TAO_ROOT)/tao/Environment.h \ + $(TAO_ROOT)/tao/Object.h \ + $(TAO_ROOT)/tao/Object_Proxy_Broker.h \ + $(TAO_ROOT)/tao/Object_Proxy_Impl.h \ + $(TAO_ROOT)/tao/Typecode.h \ + $(TAO_ROOT)/tao/Exception.h \ + $(TAO_ROOT)/tao/SmartProxies/Smart_Proxies.h \ + $(TAO_ROOT)/tao/SmartProxies/smartproxies_export.h \ + $(TAO_ROOT)/tao/TAO_Singleton.h \ + $(TAO_ROOT)/tao/TAO_Singleton.cpp \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \ + $(TAO_ROOT)/tao/TAO_Singleton.inl \ + $(TAO_ROOT)/tao/TimeBaseS_T.h \ + $(TAO_ROOT)/tao/TimeBaseS_T.cpp \ + $(TAO_ROOT)/tao/TimeBaseS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseC.h \ + $(TAO_ROOT)/tao/corba.h \ + $(TAO_ROOT)/tao/NVList.h \ + $(ACE_ROOT)/ace/Unbounded_Queue.h \ + $(ACE_ROOT)/ace/Unbounded_Queue.cpp \ + $(ACE_ROOT)/ace/Unbounded_Queue.inl \ + $(TAO_ROOT)/tao/LocalObject.h \ + $(TAO_ROOT)/tao/Principal.h \ + $(TAO_ROOT)/tao/OctetSeqC.h \ + $(TAO_ROOT)/tao/Sequence.h \ + $(TAO_ROOT)/tao/Managed_Types.h \ + $(TAO_ROOT)/tao/Sequence_T.h \ + $(TAO_ROOT)/tao/Sequence_T.cpp \ + $(TAO_ROOT)/tao/Sequence_T.i \ + $(TAO_ROOT)/tao/ORB.h \ + $(TAO_ROOT)/tao/Services.h \ + $(TAO_ROOT)/tao/CORBA_String.h \ + $(TAO_ROOT)/tao/PolicyC.h \ + $(TAO_ROOT)/tao/Encodable.h \ + $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \ + $(TAO_ROOT)/tao/CurrentC.h \ + $(TAO_ROOT)/tao/BoundsC.h \ + $(TAO_ROOT)/tao/ValueBase.h \ + $(TAO_ROOT)/tao/ValueFactory.h \ + $(TAO_ROOT)/tao/DomainC.h \ + $(TAO_ROOT)/tao/WrongTransactionC.h \ + $(TAO_ROOT)/tao/Object_KeyC.h \ + $(TAO_ROOT)/tao/ObjectIDList.h \ + $(TAO_ROOT)/tao/StringSeqC.h \ + $(TAO_ROOT)/tao/PortableInterceptorC.h \ + $(TAO_ROOT)/tao/DynamicC.h \ + $(TAO_ROOT)/tao/MessagingC.h \ + $(TAO_ROOT)/tao/IOPC.h \ + $(TAO_ROOT)/tao/PollableC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/svc_utils_export.h \ + $(TAO_ROOT)/tao/PortableServer/PortableServer.h \ + $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \ + $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \ + $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \ + $(TAO_ROOT)/tao/Abstract_Servant_Base.h \ + $(ACE_ROOT)/ace/Atomic_Op.h \ + $(ACE_ROOT)/ace/Atomic_Op.cpp \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \ + $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \ + $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Event/event_export.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecBaseC.h \ + $(ACE_ROOT)/ace/Sample_History.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Event_Service_Constants.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Time_Utilities.h + +.obj/Supplier.o .obj/Supplier.so .shobj/Supplier.o .shobj/Supplier.so: Supplier.cpp Supplier.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS.h \ + $(ACE_ROOT)/ace/pre.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS.h \ + $(TAO_ROOT)/tao/TimeBaseS.h \ + $(TAO_ROOT)/tao/TimeBaseC.h \ + $(TAO_ROOT)/tao/corbafwd.h \ + $(ACE_ROOT)/ace/CDR_Base.h \ + $(ACE_ROOT)/ace/post.h \ + $(ACE_ROOT)/ace/ACE_export.h \ + $(ACE_ROOT)/ace/svc_export.h \ + $(ACE_ROOT)/ace/ace_wchar.h \ + $(ACE_ROOT)/ace/ace_wchar.inl \ + $(ACE_ROOT)/ace/OS_Errno.h \ + $(ACE_ROOT)/ace/OS_Export.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/OS_Dirent.h \ + $(ACE_ROOT)/ace/OS_String.h \ + $(ACE_ROOT)/ace/OS_Memory.h \ + $(ACE_ROOT)/ace/OS_TLI.h \ + $(ACE_ROOT)/ace/Default_Constants.h \ + $(ACE_ROOT)/ace/Global_Macros.h \ + $(ACE_ROOT)/ace/Min_Max.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Flag_Manip.h \ + $(ACE_ROOT)/ace/Flag_Manip.i \ + $(ACE_ROOT)/ace/Handle_Ops.h \ + $(ACE_ROOT)/ace/Handle_Ops.i \ + $(ACE_ROOT)/ace/Lib_Find.h \ + $(ACE_ROOT)/ace/Lib_Find.i \ + $(ACE_ROOT)/ace/Init_ACE.h \ + $(ACE_ROOT)/ace/Init_ACE.i \ + $(ACE_ROOT)/ace/Sock_Connect.h \ + $(ACE_ROOT)/ace/Sock_Connect.i \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.h \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Malloc_Allocator.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Unbounded_Set.h \ + $(ACE_ROOT)/ace/Node.h \ + $(ACE_ROOT)/ace/Node.cpp \ + $(ACE_ROOT)/ace/Unbounded_Set.cpp \ + $(ACE_ROOT)/ace/Unbounded_Set.inl \ + $(ACE_ROOT)/ace/Message_Block_T.h \ + $(ACE_ROOT)/ace/Message_Block_T.cpp \ + $(ACE_ROOT)/ace/Message_Block_T.i \ + $(TAO_ROOT)/tao/try_macros.h \ + $(TAO_ROOT)/tao/orbconf.h \ + $(ACE_ROOT)/ace/CORBA_macros.h \ + $(TAO_ROOT)/tao/varbase.h \ + $(TAO_ROOT)/tao/TAO_Export.h \ + $(TAO_ROOT)/tao/CDR.h \ + $(ACE_ROOT)/ace/CDR_Stream.h \ + $(ACE_ROOT)/ace/SString.h \ + $(ACE_ROOT)/ace/String_Base.h \ + $(ACE_ROOT)/ace/String_Base_Const.h \ + $(ACE_ROOT)/ace/String_Base.cpp \ + $(ACE_ROOT)/ace/Auto_Ptr.h \ + $(ACE_ROOT)/ace/Auto_Ptr.cpp \ + $(ACE_ROOT)/ace/Auto_Ptr.i \ + $(ACE_ROOT)/ace/String_Base.i \ + $(TAO_ROOT)/tao/Any.h \ + $(TAO_ROOT)/tao/Environment.h \ + $(TAO_ROOT)/tao/Object.h \ + $(TAO_ROOT)/tao/Object_Proxy_Broker.h \ + $(TAO_ROOT)/tao/Object_Proxy_Impl.h \ + $(TAO_ROOT)/tao/Typecode.h \ + $(TAO_ROOT)/tao/Exception.h \ + $(TAO_ROOT)/tao/SmartProxies/Smart_Proxies.h \ + $(TAO_ROOT)/tao/SmartProxies/smartproxies_export.h \ + $(TAO_ROOT)/tao/TAO_Singleton.h \ + $(TAO_ROOT)/tao/TAO_Singleton.cpp \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \ + $(TAO_ROOT)/tao/TAO_Singleton.inl \ + $(TAO_ROOT)/tao/TimeBaseS_T.h \ + $(TAO_ROOT)/tao/TimeBaseS_T.cpp \ + $(TAO_ROOT)/tao/TimeBaseS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseC.h \ + $(TAO_ROOT)/tao/corba.h \ + $(TAO_ROOT)/tao/NVList.h \ + $(ACE_ROOT)/ace/Unbounded_Queue.h \ + $(ACE_ROOT)/ace/Unbounded_Queue.cpp \ + $(ACE_ROOT)/ace/Unbounded_Queue.inl \ + $(TAO_ROOT)/tao/LocalObject.h \ + $(TAO_ROOT)/tao/Principal.h \ + $(TAO_ROOT)/tao/OctetSeqC.h \ + $(TAO_ROOT)/tao/Sequence.h \ + $(TAO_ROOT)/tao/Managed_Types.h \ + $(TAO_ROOT)/tao/Sequence_T.h \ + $(TAO_ROOT)/tao/Sequence_T.cpp \ + $(TAO_ROOT)/tao/Sequence_T.i \ + $(TAO_ROOT)/tao/ORB.h \ + $(TAO_ROOT)/tao/Services.h \ + $(TAO_ROOT)/tao/CORBA_String.h \ + $(TAO_ROOT)/tao/PolicyC.h \ + $(TAO_ROOT)/tao/Encodable.h \ + $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \ + $(TAO_ROOT)/tao/CurrentC.h \ + $(TAO_ROOT)/tao/BoundsC.h \ + $(TAO_ROOT)/tao/ValueBase.h \ + $(TAO_ROOT)/tao/ValueFactory.h \ + $(TAO_ROOT)/tao/DomainC.h \ + $(TAO_ROOT)/tao/WrongTransactionC.h \ + $(TAO_ROOT)/tao/Object_KeyC.h \ + $(TAO_ROOT)/tao/ObjectIDList.h \ + $(TAO_ROOT)/tao/StringSeqC.h \ + $(TAO_ROOT)/tao/PortableInterceptorC.h \ + $(TAO_ROOT)/tao/DynamicC.h \ + $(TAO_ROOT)/tao/MessagingC.h \ + $(TAO_ROOT)/tao/IOPC.h \ + $(TAO_ROOT)/tao/PollableC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/svc_utils_export.h \ + $(TAO_ROOT)/tao/PortableServer/PortableServer.h \ + $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \ + $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \ + $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \ + $(TAO_ROOT)/tao/Abstract_Servant_Base.h \ + $(ACE_ROOT)/ace/Atomic_Op.h \ + $(ACE_ROOT)/ace/Atomic_Op.cpp \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \ + $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \ + $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Event/event_export.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecBaseC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Event_Service_Constants.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Time_Utilities.h + +.obj/Receive_Task.o .obj/Receive_Task.so .shobj/Receive_Task.o .shobj/Receive_Task.so: Receive_Task.cpp Receive_Task.h \ + $(TAO_ROOT)/tao/ORB.h \ + $(ACE_ROOT)/ace/pre.h \ + $(TAO_ROOT)/tao/corbafwd.h \ + $(ACE_ROOT)/ace/CDR_Base.h \ + $(ACE_ROOT)/ace/post.h \ + $(ACE_ROOT)/ace/ACE_export.h \ + $(ACE_ROOT)/ace/svc_export.h \ + $(ACE_ROOT)/ace/ace_wchar.h \ + $(ACE_ROOT)/ace/ace_wchar.inl \ + $(ACE_ROOT)/ace/OS_Errno.h \ + $(ACE_ROOT)/ace/OS_Export.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/OS_Dirent.h \ + $(ACE_ROOT)/ace/OS_String.h \ + $(ACE_ROOT)/ace/OS_Memory.h \ + $(ACE_ROOT)/ace/OS_TLI.h \ + $(ACE_ROOT)/ace/Default_Constants.h \ + $(ACE_ROOT)/ace/Global_Macros.h \ + $(ACE_ROOT)/ace/Min_Max.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Flag_Manip.h \ + $(ACE_ROOT)/ace/Flag_Manip.i \ + $(ACE_ROOT)/ace/Handle_Ops.h \ + $(ACE_ROOT)/ace/Handle_Ops.i \ + $(ACE_ROOT)/ace/Lib_Find.h \ + $(ACE_ROOT)/ace/Lib_Find.i \ + $(ACE_ROOT)/ace/Init_ACE.h \ + $(ACE_ROOT)/ace/Init_ACE.i \ + $(ACE_ROOT)/ace/Sock_Connect.h \ + $(ACE_ROOT)/ace/Sock_Connect.i \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.h \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Malloc_Allocator.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Unbounded_Set.h \ + $(ACE_ROOT)/ace/Node.h \ + $(ACE_ROOT)/ace/Node.cpp \ + $(ACE_ROOT)/ace/Unbounded_Set.cpp \ + $(ACE_ROOT)/ace/Unbounded_Set.inl \ + $(ACE_ROOT)/ace/Message_Block_T.h \ + $(ACE_ROOT)/ace/Message_Block_T.cpp \ + $(ACE_ROOT)/ace/Message_Block_T.i \ + $(TAO_ROOT)/tao/try_macros.h \ + $(TAO_ROOT)/tao/orbconf.h \ + $(ACE_ROOT)/ace/CORBA_macros.h \ + $(TAO_ROOT)/tao/varbase.h \ + $(TAO_ROOT)/tao/TAO_Export.h \ + $(TAO_ROOT)/tao/Exception.h \ + $(ACE_ROOT)/ace/SString.h \ + $(ACE_ROOT)/ace/String_Base.h \ + $(ACE_ROOT)/ace/String_Base_Const.h \ + $(ACE_ROOT)/ace/String_Base.cpp \ + $(ACE_ROOT)/ace/Auto_Ptr.h \ + $(ACE_ROOT)/ace/Auto_Ptr.cpp \ + $(ACE_ROOT)/ace/Auto_Ptr.i \ + $(ACE_ROOT)/ace/String_Base.i \ + $(TAO_ROOT)/tao/Services.h \ + $(TAO_ROOT)/tao/Sequence.h \ + $(TAO_ROOT)/tao/Managed_Types.h \ + $(TAO_ROOT)/tao/Sequence_T.h \ + $(TAO_ROOT)/tao/Sequence_T.cpp \ + $(TAO_ROOT)/tao/Environment.h \ + $(TAO_ROOT)/tao/Sequence_T.i \ + $(TAO_ROOT)/tao/CORBA_String.h \ + $(TAO_ROOT)/tao/PolicyC.h \ + $(TAO_ROOT)/tao/Encodable.h \ + $(TAO_ROOT)/tao/CDR.h \ + $(ACE_ROOT)/ace/CDR_Stream.h \ + $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \ + $(TAO_ROOT)/tao/Object_Proxy_Impl.h \ + $(TAO_ROOT)/tao/CurrentC.h \ + $(TAO_ROOT)/tao/Object.h \ + $(TAO_ROOT)/tao/Object_Proxy_Broker.h \ + $(ACE_ROOT)/ace/Task.h \ + $(ACE_ROOT)/ace/Service_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.h \ + $(ACE_ROOT)/ace/Thread_Manager.h \ + $(ACE_ROOT)/ace/Unbounded_Queue.h \ + $(ACE_ROOT)/ace/Unbounded_Queue.cpp \ + $(ACE_ROOT)/ace/Unbounded_Queue.inl \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Array_Base.h \ + $(ACE_ROOT)/ace/Array_Base.cpp \ + $(ACE_ROOT)/ace/Array_Base.inl \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Singleton.cpp \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Task_T.h \ + $(ACE_ROOT)/ace/Message_Queue.h \ + $(ACE_ROOT)/ace/IO_Cntl_Msg.h \ + $(ACE_ROOT)/ace/Message_Queue_T.h \ + $(ACE_ROOT)/ace/Message_Queue_T.cpp \ + $(ACE_ROOT)/ace/Message_Queue_T.i \ + $(ACE_ROOT)/ace/Notification_Strategy.h \ + $(ACE_ROOT)/ace/Task_T.cpp \ + $(ACE_ROOT)/ace/Module.h \ + $(ACE_ROOT)/ace/Module.cpp \ + $(ACE_ROOT)/ace/Stream_Modules.h \ + $(ACE_ROOT)/ace/Stream_Modules.cpp \ + $(ACE_ROOT)/ace/Module.i \ + $(ACE_ROOT)/ace/Task_T.i + +.obj/Send_Task.o .obj/Send_Task.so .shobj/Send_Task.o .shobj/Send_Task.so: Send_Task.cpp Send_Task.h Servant_var.h \ + $(ACE_ROOT)/ace/pre.h \ + $(ACE_ROOT)/ace/post.h \ + $(ACE_ROOT)/ace/ACE_export.h \ + $(ACE_ROOT)/ace/svc_export.h \ + $(ACE_ROOT)/ace/ace_wchar.h \ + $(ACE_ROOT)/ace/ace_wchar.inl \ + $(ACE_ROOT)/ace/OS_Errno.h \ + $(ACE_ROOT)/ace/OS_Export.h \ + Servant_var.cpp \ + $(TAO_ROOT)/tao/corba.h \ + $(TAO_ROOT)/tao/corbafwd.h \ + $(ACE_ROOT)/ace/CDR_Base.h \ + $(ACE_ROOT)/ace/Basic_Types.h \ + $(ACE_ROOT)/ace/Message_Block.h \ + $(ACE_ROOT)/ace/ACE.h \ + $(ACE_ROOT)/ace/OS.h \ + $(ACE_ROOT)/ace/OS_Dirent.h \ + $(ACE_ROOT)/ace/OS_String.h \ + $(ACE_ROOT)/ace/OS_Memory.h \ + $(ACE_ROOT)/ace/OS_TLI.h \ + $(ACE_ROOT)/ace/Default_Constants.h \ + $(ACE_ROOT)/ace/Global_Macros.h \ + $(ACE_ROOT)/ace/Min_Max.h \ + $(ACE_ROOT)/ace/streams.h \ + $(ACE_ROOT)/ace/Trace.h \ + $(ACE_ROOT)/ace/Flag_Manip.h \ + $(ACE_ROOT)/ace/Flag_Manip.i \ + $(ACE_ROOT)/ace/Handle_Ops.h \ + $(ACE_ROOT)/ace/Handle_Ops.i \ + $(ACE_ROOT)/ace/Lib_Find.h \ + $(ACE_ROOT)/ace/Lib_Find.i \ + $(ACE_ROOT)/ace/Init_ACE.h \ + $(ACE_ROOT)/ace/Init_ACE.i \ + $(ACE_ROOT)/ace/Sock_Connect.h \ + $(ACE_ROOT)/ace/Sock_Connect.i \ + $(ACE_ROOT)/ace/ACE.i \ + $(ACE_ROOT)/ace/Malloc.h \ + $(ACE_ROOT)/ace/Log_Msg.h \ + $(ACE_ROOT)/ace/Log_Record.h \ + $(ACE_ROOT)/ace/Log_Priority.h \ + $(ACE_ROOT)/ace/Log_Record.i \ + $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.h \ + $(ACE_ROOT)/ace/Malloc_T.h \ + $(ACE_ROOT)/ace/Synch.h \ + $(ACE_ROOT)/ace/Synch_T.h \ + $(ACE_ROOT)/ace/Synch_T.cpp \ + $(ACE_ROOT)/ace/Thread.h \ + $(ACE_ROOT)/ace/Thread_Adapter.h \ + $(ACE_ROOT)/ace/Base_Thread_Adapter.h \ + $(ACE_ROOT)/ace/Synch_T.i \ + $(ACE_ROOT)/ace/Malloc_Allocator.h \ + $(ACE_ROOT)/ace/Malloc_Base.h \ + $(ACE_ROOT)/ace/Free_List.h \ + $(ACE_ROOT)/ace/Free_List.cpp \ + $(ACE_ROOT)/ace/Free_List.i \ + $(ACE_ROOT)/ace/Malloc_T.cpp \ + $(ACE_ROOT)/ace/Malloc_T.i \ + $(ACE_ROOT)/ace/Memory_Pool.h \ + $(ACE_ROOT)/ace/Event_Handler.h \ + $(ACE_ROOT)/ace/Signal.h \ + $(ACE_ROOT)/ace/Mem_Map.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.h \ + $(ACE_ROOT)/ace/SV_Semaphore_Simple.i \ + $(ACE_ROOT)/ace/SV_Semaphore_Complex.i \ + $(ACE_ROOT)/ace/Unbounded_Set.h \ + $(ACE_ROOT)/ace/Node.h \ + $(ACE_ROOT)/ace/Node.cpp \ + $(ACE_ROOT)/ace/Unbounded_Set.cpp \ + $(ACE_ROOT)/ace/Unbounded_Set.inl \ + $(ACE_ROOT)/ace/Message_Block_T.h \ + $(ACE_ROOT)/ace/Message_Block_T.cpp \ + $(ACE_ROOT)/ace/Message_Block_T.i \ + $(TAO_ROOT)/tao/try_macros.h \ + $(TAO_ROOT)/tao/orbconf.h \ + $(ACE_ROOT)/ace/CORBA_macros.h \ + $(TAO_ROOT)/tao/varbase.h \ + $(TAO_ROOT)/tao/TAO_Export.h \ + $(TAO_ROOT)/tao/Typecode.h \ + $(TAO_ROOT)/tao/Exception.h \ + $(ACE_ROOT)/ace/SString.h \ + $(ACE_ROOT)/ace/String_Base.h \ + $(ACE_ROOT)/ace/String_Base_Const.h \ + $(ACE_ROOT)/ace/String_Base.cpp \ + $(ACE_ROOT)/ace/Auto_Ptr.h \ + $(ACE_ROOT)/ace/Auto_Ptr.cpp \ + $(ACE_ROOT)/ace/Auto_Ptr.i \ + $(ACE_ROOT)/ace/String_Base.i \ + $(TAO_ROOT)/tao/Any.h \ + $(TAO_ROOT)/tao/CDR.h \ + $(ACE_ROOT)/ace/CDR_Stream.h \ + $(TAO_ROOT)/tao/Environment.h \ + $(TAO_ROOT)/tao/Object.h \ + $(TAO_ROOT)/tao/Object_Proxy_Broker.h \ + $(TAO_ROOT)/tao/Object_Proxy_Impl.h \ + $(TAO_ROOT)/tao/NVList.h \ + $(ACE_ROOT)/ace/Unbounded_Queue.h \ + $(ACE_ROOT)/ace/Unbounded_Queue.cpp \ + $(ACE_ROOT)/ace/Unbounded_Queue.inl \ + $(TAO_ROOT)/tao/LocalObject.h \ + $(TAO_ROOT)/tao/Principal.h \ + $(TAO_ROOT)/tao/OctetSeqC.h \ + $(TAO_ROOT)/tao/Sequence.h \ + $(TAO_ROOT)/tao/Managed_Types.h \ + $(TAO_ROOT)/tao/Sequence_T.h \ + $(TAO_ROOT)/tao/Sequence_T.cpp \ + $(TAO_ROOT)/tao/Sequence_T.i \ + $(TAO_ROOT)/tao/ORB.h \ + $(TAO_ROOT)/tao/Services.h \ + $(TAO_ROOT)/tao/CORBA_String.h \ + $(TAO_ROOT)/tao/PolicyC.h \ + $(TAO_ROOT)/tao/Encodable.h \ + $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \ + $(TAO_ROOT)/tao/CurrentC.h \ + $(TAO_ROOT)/tao/BoundsC.h \ + $(TAO_ROOT)/tao/ValueBase.h \ + $(TAO_ROOT)/tao/ValueFactory.h \ + $(TAO_ROOT)/tao/DomainC.h \ + $(TAO_ROOT)/tao/WrongTransactionC.h \ + $(TAO_ROOT)/tao/Object_KeyC.h \ + $(TAO_ROOT)/tao/ObjectIDList.h \ + $(TAO_ROOT)/tao/StringSeqC.h \ + $(TAO_ROOT)/tao/PortableInterceptorC.h \ + $(TAO_ROOT)/tao/DynamicC.h \ + $(TAO_ROOT)/tao/MessagingC.h \ + $(TAO_ROOT)/tao/TimeBaseC.h \ + $(TAO_ROOT)/tao/SmartProxies/Smart_Proxies.h \ + $(TAO_ROOT)/tao/SmartProxies/smartproxies_export.h \ + $(TAO_ROOT)/tao/TAO_Singleton.h \ + $(TAO_ROOT)/tao/TAO_Singleton.cpp \ + $(ACE_ROOT)/ace/Object_Manager.h \ + $(ACE_ROOT)/ace/Managed_Object.h \ + $(ACE_ROOT)/ace/Managed_Object.cpp \ + $(ACE_ROOT)/ace/Managed_Object.i \ + $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \ + $(TAO_ROOT)/tao/TAO_Singleton.inl \ + $(TAO_ROOT)/tao/IOPC.h \ + $(TAO_ROOT)/tao/PollableC.h \ + Servant_var.inl Supplier.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS.h \ + $(TAO_ROOT)/tao/TimeBaseS.h \ + $(TAO_ROOT)/tao/TimeBaseS_T.h \ + $(TAO_ROOT)/tao/TimeBaseS_T.cpp \ + $(TAO_ROOT)/tao/TimeBaseS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/svc_utils_export.h \ + $(TAO_ROOT)/tao/PortableServer/PortableServer.h \ + $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \ + $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \ + $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \ + $(TAO_ROOT)/tao/Abstract_Servant_Base.h \ + $(ACE_ROOT)/ace/Atomic_Op.h \ + $(ACE_ROOT)/ace/Atomic_Op.cpp \ + $(ACE_ROOT)/ace/Atomic_Op.i \ + $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \ + $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \ + $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Event/event_export.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.cpp \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminC.h \ + $(TAO_ROOT)/orbsvcs/orbsvcs/RtecBaseC.h \ + $(ACE_ROOT)/ace/Task.h \ + $(ACE_ROOT)/ace/Service_Object.h \ + $(ACE_ROOT)/ace/Shared_Object.h \ + $(ACE_ROOT)/ace/Thread_Manager.h \ + $(ACE_ROOT)/ace/Containers.h \ + $(ACE_ROOT)/ace/Containers_T.h \ + $(ACE_ROOT)/ace/Array_Base.h \ + $(ACE_ROOT)/ace/Array_Base.cpp \ + $(ACE_ROOT)/ace/Array_Base.inl \ + $(ACE_ROOT)/ace/Containers_T.cpp \ + $(ACE_ROOT)/ace/Containers_T.i \ + $(ACE_ROOT)/ace/Singleton.h \ + $(ACE_ROOT)/ace/Singleton.cpp \ + $(ACE_ROOT)/ace/Singleton.i \ + $(ACE_ROOT)/ace/Task_T.h \ + $(ACE_ROOT)/ace/Message_Queue.h \ + $(ACE_ROOT)/ace/IO_Cntl_Msg.h \ + $(ACE_ROOT)/ace/Message_Queue_T.h \ + $(ACE_ROOT)/ace/Message_Queue_T.cpp \ + $(ACE_ROOT)/ace/Message_Queue_T.i \ + $(ACE_ROOT)/ace/Notification_Strategy.h \ + $(ACE_ROOT)/ace/Task_T.cpp \ + $(ACE_ROOT)/ace/Module.h \ + $(ACE_ROOT)/ace/Module.cpp \ + $(ACE_ROOT)/ace/Stream_Modules.h \ + $(ACE_ROOT)/ace/Stream_Modules.cpp \ + $(ACE_ROOT)/ace/Module.i \ + $(ACE_ROOT)/ace/Task_T.i \ + $(TAO_ROOT)/orbsvcs/orbsvcs/Time_Utilities.h + +# IF YOU PUT ANYTHING HERE IT WILL GO AWAY diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.cpp b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.cpp new file mode 100644 index 00000000000..dd1547a0ce2 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.cpp @@ -0,0 +1,28 @@ +/** + * @file POA_Destroyer.cpp + * + * $Id$ + * + * @author Carlos O'Ryan + */ + +#include "POA_Destroyer.h" + +#if !defined(__ACE_INLINE__) +#include "POA_Destroyer.inl" +#endif /* __ACE_INLINE__ */ + +POA_Destroyer::~POA_Destroyer () +{ + if (CORBA::is_nil (this->poa_.in ())) + return; + + ACE_DECLARE_NEW_CORBA_ENV; + ACE_TRY { + this->poa_->destroy (1, 1 + TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } ACE_CATCHANY { + // @@ This event should be logged... + } ACE_ENDTRY; +} diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.h b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.h new file mode 100644 index 00000000000..c19d3f87ea2 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.h @@ -0,0 +1,36 @@ +/** + * @file poa_destroyer.h + * + * $Id$ + * + * @author Jody Hagins + * @author Carlos O'Ryan + * + */ +#ifndef CS_POA_DESTROYER_H +#define CS_POA_DESTROYER_H + +#include "tao/PortableServer/PortableServer.h" + +class POA_Destroyer +{ +public: + /// Constructor + ACE_EXPLICIT POA_Destroyer (PortableServer::POA_ptr poa); + + /// Destructor + ~POA_Destroyer (); + + /// Release the POA and do not destroy it. + void release (); + +private: + /// The owned object + PortableServer::POA_var poa_; +}; + +#if defined(__ACE_INLINE__) +#include "POA_Destroyer.inl" +#endif /* __ACE_INLINE__ */ + +#endif /* CS_POA_DESTROYER_H */ diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.inl b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.inl new file mode 100644 index 00000000000..43f761a9d38 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/POA_Destroyer.inl @@ -0,0 +1,13 @@ +// $Id$ + +ACE_INLINE +POA_Destroyer::POA_Destroyer (PortableServer::POA_ptr poa) + : poa_ (PortableServer::POA::_duplicate (poa)) +{ +} + +ACE_INLINE void +POA_Destroyer::release () +{ + this->poa_ = PortableServer::POA::_nil (); +} diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Receive_Task.cpp b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Receive_Task.cpp new file mode 100644 index 00000000000..c0debdfdeb0 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Receive_Task.cpp @@ -0,0 +1,33 @@ +/** + * @file Receive_Task.cpp + * + * $Id$ + * + * @author Carlos O'Ryan + */ + +#include "Receive_Task.h" + +ACE_RCSID(EC_Colocated_Latency, Receive_Task, "$Id$") + +ECCL_Receive_Task::ECCL_Receive_Task (CORBA::ORB_ptr orb) + : orb_ (CORBA::ORB::_duplicate (orb)) +{ +} + +int +ECCL_Receive_Task::svc (void) +{ + ACE_DECLARE_NEW_CORBA_ENV; + ACE_TRY + { + this->orb_->run (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + return -1; + } + ACE_ENDTRY; + return 0; +} diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Receive_Task.h b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Receive_Task.h new file mode 100644 index 00000000000..e6b0c58b648 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Receive_Task.h @@ -0,0 +1,39 @@ +/** + * @file Receive_Task.h + * + * $Id$ + * + */ + +#ifndef ECCL_RECEIVE_TASK_H +#define ECCL_RECEIVE_TASK_H + +#include "tao/ORB.h" +#include "ace/Task.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +/** + * @class ECCL_Receive_Task + * + * @brief Implement a simple ACE_Task to receive the events + * + */ +class ECCL_Receive_Task : public ACE_Task_Base +{ +public: + /// Constructor + ECCL_Receive_Task (CORBA::ORB_ptr orb); + + /// Run the experiment + int svc (void); + +private: + /// The consumer + CORBA::ORB_var orb_; +}; + + +#endif /* ECCL_RECEIVE_TASK_H */ diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Send_Task.cpp b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Send_Task.cpp new file mode 100644 index 00000000000..f0aeb55a35e --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Send_Task.cpp @@ -0,0 +1,70 @@ +/** + * @file Send_Task.cpp + * + * $Id$ + * + * @author Carlos O'Ryan + */ + +#include "Send_Task.h" +#include "orbsvcs/Time_Utilities.h" + +ACE_RCSID(EC_Colocated_Latency, Send_Task, "$Id$") + +ECCL_Send_Task::ECCL_Send_Task (void) + : iterations_ (0) + , period_in_usecs_ (0) + , event_type_ (0) + , event_source_ (0) + , barrier_ (0) +{ +} + +void +ECCL_Send_Task::init (int iterations, + int period_in_usecs, + int event_type, + int event_source, + ECCL_Supplier *supplier, + ACE_Barrier *barrier) +{ + this->iterations_ = iterations; + this->period_in_usecs_ = period_in_usecs; + this->event_type_ = event_type; + this->event_source_ = event_source; + this->supplier_ = Servant_var (supplier); + this->barrier_ = barrier; +} + +int +ECCL_Send_Task::svc (void) +{ + if (this->barrier_ == 0) + return -1; + + this->barrier_->wait (); + + RtecEventComm::EventSet event (1); + event.length (1); + event[0].header.type = this->event_type_; + event[0].header.source = this->event_source_; + event[0].header.ttl = 1; + + ACE_Time_Value period (0, this->period_in_usecs_); + + for (int i = 0; i != this->iterations_; ++i) + { + ACE_OS::sleep (period); + ACE_hrtime_t creation = ACE_OS::gethrtime (); + ORBSVCS_Time::hrtime_to_TimeT (event[0].header.creation_time, + creation); + // push one event... + this->supplier_->push (event TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + } + return 0; +} + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) +#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Send_Task.h b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Send_Task.h new file mode 100644 index 00000000000..a14429ba490 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Send_Task.h @@ -0,0 +1,56 @@ +/** + * @file Send_Task.h + * + * $Id$ + * + */ + +#ifndef ECCL_SEND_TASK_H +#define ECCL_SEND_TASK_H + +#include "Servant_var.h" +#include "Supplier.h" +#include "ace/Task.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +/** + * @class ECCL_Send_Task + * + * @brief Implement a simple ACE_Task to send the events + * + */ +class ECCL_Send_Task : public ACE_Task_Base +{ +public: + /// Constructor + ECCL_Send_Task (); + + void init (int iterations, + int period_in_usecs, + int event_type, + int event_source, + ECCL_Supplier *supplier, + ACE_Barrier *barrier); + + /// Run the experiment + int svc (void); + +private: + int iterations_; + + int period_in_usecs_; + + int event_type_; + + int event_source_; + + Servant_var supplier_; + + ACE_Barrier *barrier_; +}; + + +#endif /* ECCL_SEND_TASK_H */ diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.cpp b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.cpp new file mode 100644 index 00000000000..3c561bbbcf6 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.cpp @@ -0,0 +1,34 @@ +/** + * @file Servant_var.cpp + * + * $Id$ + * + * @author Jody Hagins + * @author Carlos O'Ryan + */ +#ifndef CS_SERVANT_VAR_CPP +#define CS_SERVANT_VAR_CPP + +#include "Servant_var.h" +#include "tao/corba.h" + +#if !defined(__ACE_INLINE__) +#include "Servant_var.inl" +#endif /* __ACE_INLINE__ */ + +template +Servant_var::~Servant_var () +{ + if (this->ptr_ == 0) + return; + + ACE_DECLARE_NEW_CORBA_ENV; + ACE_TRY { + this->ptr_->_remove_ref (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } ACE_CATCHANY { + // @@ This event should be logged... + } ACE_ENDTRY; +} + +#endif /* CS_SERVANT_VAR_CPP */ diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.h b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.h new file mode 100644 index 00000000000..923702636a1 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.h @@ -0,0 +1,65 @@ +/** + * @file Servant_var.h + * + * $Id$ + * + * @author Jody Hagins + * @author Carlos O'Ryan + * + */ +#ifndef CS_SERVANT_VAR_H +#define CS_SERVANT_VAR_H + +#include "ace/config-all.h" + +template +class Servant_var +{ +public: + /// Constructor + /** + * @param s The contained servant. This class assumes ownership + */ + ACE_EXPLICIT Servant_var (SERVANT *s = 0); + + /// Copy constructor + Servant_var (const Servant_var &rhs); + + /// Assignment + Servant_var& operator= (const Servant_var &rhs); + + /// Destructor + ~Servant_var (); + + //@{ + /** @name Smart pointer operations + */ + const SERVANT * operator->() const; + SERVANT * operator->(); + + operator SERVANT *(); + operator const SERVANT * () const; + //@} + + //@{ + /** @name Canonical CORBA T_var methods + */ + SERVANT *in () const; + SERVANT *&out (); + SERVANT *&inout (); + //@} + +private: + /// The owned object + SERVANT *ptr_; +}; + +#if defined(__ACE_INLINE__) +#include "Servant_var.inl" +#endif /* __ACE_INLINE__ */ + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "Servant_var.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#endif /* CS_SERVANT_VAR_H */ diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.inl b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.inl new file mode 100644 index 00000000000..48678a17fe2 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Servant_var.inl @@ -0,0 +1,77 @@ +// $Id$ + +template ACE_INLINE +Servant_var::Servant_var (SERVANT *s) + : ptr_ (s) +{ +} + +template ACE_INLINE +Servant_var::Servant_var (const Servant_var &rhs) + : ptr_ (rhs.in ()) +{ + if (this->ptr_ != 0) + this->ptr_->_add_ref (); +} + +template ACE_INLINE Servant_var& +Servant_var::operator= (const Servant_var &rhs) +{ + Servant_var tmp (rhs); + { + // @@ We should use + // + // std::swap (this->ptr_, tmp.ptr_); + // + // but we lack a proper STL on many platforms. + // + SERVANT *x = this->ptr_; + this->ptr_ = tmp.ptr_; + tmp.ptr_ = x; + } + return *this; +} + +template ACE_INLINE SERVANT* +Servant_var::operator-> () +{ + return this->ptr_; +} + +template ACE_INLINE const SERVANT* +Servant_var::operator-> () const +{ + return this->ptr_; +} + +template ACE_INLINE +Servant_var::operator SERVANT *() +{ + return this->ptr_; +} + +template ACE_INLINE +Servant_var::operator const SERVANT * () const +{ + return this->ptr_; +} + +template ACE_INLINE SERVANT * +Servant_var::in () const +{ + return this->ptr_; +} + +template ACE_INLINE SERVANT *& +Servant_var::out () +{ + this->ptr_->_remove_ref (); + this->ptr_ = 0; + return this->ptr_; +} + +template ACE_INLINE SERVANT *& +Servant_var::inout () +{ + return this->ptr_; +} diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Supplier.cpp b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Supplier.cpp new file mode 100644 index 00000000000..a6d5e229b09 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Supplier.cpp @@ -0,0 +1,104 @@ +/** + * @file Supplier.cpp + * + * $Id$ + * + * @author Carlos O'Ryan + */ + +#include "Supplier.h" +#include "orbsvcs/Event_Service_Constants.h" + +ACE_RCSID(EC_Colocated_Latency, Supplier, "$Id$") + +ECCL_Supplier::ECCL_Supplier (void) +{ +} + +void +ECCL_Supplier::connect (RtecEventChannelAdmin::EventChannel_ptr ec, + int event_type + TAO_ENV_ARG_DECL) +{ + RtecEventChannelAdmin::SupplierAdmin_var supplier_admin = + ec->for_suppliers (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + { + ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_); + if (!CORBA::is_nil (this->proxy_consumer_.in ())) + return; + + this->proxy_consumer_ = + supplier_admin->obtain_push_consumer (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + } + + RtecEventComm::PushSupplier_var supplier = + this->_this (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + + RtecEventChannelAdmin::SupplierQOS supplier_qos; + supplier_qos.publications.length (1); + RtecEventComm::EventHeader& sh0 = + supplier_qos.publications[0].event.header; + sh0.type = event_type; + sh0.source = 1; // first free event source + + this->proxy_consumer_->connect_push_supplier (supplier.in (), + supplier_qos + TAO_ENV_ARG_PARAMETER); + ACE_CHECK; +} + +void +ECCL_Supplier::disconnect (TAO_ENV_SINGLE_ARG_DECL) +{ + RtecEventChannelAdmin::ProxyPushConsumer_var proxy; + { + ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_); + if (CORBA::is_nil (this->proxy_consumer_.in ())) + return; + proxy = this->proxy_consumer_._retn (); + } + + ACE_TRY + { + proxy->disconnect_push_consumer (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCHANY {} ACE_ENDTRY; + + PortableServer::POA_var poa = this->_default_POA (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + PortableServer::ObjectId_var id = poa->servant_to_id (this + TAO_ENV_ARG_PARAMETER); + ACE_CHECK; + poa->deactivate_object (id.in () TAO_ENV_ARG_PARAMETER); + ACE_CHECK; +} + +void +ECCL_Supplier::push (const RtecEventComm::EventSet &events + TAO_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + RtecEventChannelAdmin::ProxyPushConsumer_var proxy; + { + ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_); + if (CORBA::is_nil (this->proxy_consumer_.in ())) + return; + proxy = this->proxy_consumer_; + } + proxy->push (events TAO_ENV_ARG_PARAMETER); + +} + +void +ECCL_Supplier::disconnect_push_supplier (TAO_ENV_SINGLE_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)) +{ + ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_); + this->proxy_consumer_ = + RtecEventChannelAdmin::ProxyPushConsumer::_nil (); +} diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Supplier.h b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Supplier.h new file mode 100644 index 00000000000..4f16f7114d5 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/Supplier.h @@ -0,0 +1,59 @@ +/** + * @file Supplier.h + * + * $Id$ + * + */ + +#ifndef ECCL_SUPPLIER_H +#define ECCL_SUPPLIER_H + +#include "orbsvcs/RtecEventCommS.h" +#include "orbsvcs/RtecEventChannelAdminC.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +/** + * @class ECCL_Supplier + * + * @brief Implement a simple supplier to keep track of the latency + * + */ +class ECCL_Supplier + : public virtual POA_RtecEventComm::PushSupplier + , public virtual PortableServer::RefCountServantBase +{ +public: + /// Constructor + ECCL_Supplier (void); + + /// Connect to the event channel + void connect (RtecEventChannelAdmin::EventChannel_ptr ec, + int event_type + TAO_ENV_ARG_DECL); + + /// Disconnect from the event channel + void disconnect (TAO_ENV_SINGLE_ARG_DECL); + + void push (const RtecEventComm::EventSet &events + TAO_ENV_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)); + + //@{ + /** @name The RtecEventComm::PushSupplier methods + */ + virtual void disconnect_push_supplier (TAO_ENV_SINGLE_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)); + //@} + +private: + /// Synchronize access to the internal data + TAO_SYNCH_MUTEX mutex_; + + /// The proxy this object is connected to + RtecEventChannelAdmin::ProxyPushConsumer_var proxy_consumer_; +}; + +#endif /* ECCL_SUPPLIER_H */ diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/driver.cpp b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/driver.cpp new file mode 100644 index 00000000000..daad4719e5c --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/driver.cpp @@ -0,0 +1,319 @@ +// $Id$ + +#include "Supplier.h" +#include "Consumer.h" +#include "Send_Task.h" +#include "Receive_Task.h" +#include "POA_Destroyer.h" +#include "orbsvcs/Event/EC_Default_Factory.h" +#include "orbsvcs/Event/EC_Event_Channel.h" +#include "orbsvcs/Event_Service_Constants.h" + +#include "tao/Messaging.h" +#include "tao/Strategies/advanced_resource.h" +#include "ace/Get_Opt.h" +#include "ace/Auto_Ptr.h" +#include "ace/High_Res_Timer.h" +#include "ace/Sample_History.h" +#include "ace/Basic_Stats.h" +#include "ace/Stats.h" +#include "ace/Sched_Params.h" + +ACE_RCSID(EC_Colocated_Latency, server, "$Id$") + +int iterations = 10000; +int nthreads = 0; +int do_dump_history = 0; +int high_priority_period = 0; +int low_priority_period = 0; +int disable_low_priority = 0; + +int +parse_args (int argc, char *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, "i:n:l:h:zd"); + int c; + + while ((c = get_opts ()) != -1) + switch (c) + { + case 'i': + iterations = ACE_OS::atoi (get_opts.opt_arg ()); + break; + + case 'n': + nthreads = ACE_OS::atoi (get_opts.opt_arg ()); + break; + + case 'h': + high_priority_period = ACE_OS::atoi (get_opts.opt_arg ()); + break; + + case 'l': + low_priority_period = ACE_OS::atoi (get_opts.opt_arg ()); + break; + + case 'd': + do_dump_history = 1; + break; + + case 'z': + disable_low_priority = 1; + break; + + case '?': + default: + ACE_ERROR_RETURN ((LM_ERROR, + "usage: %s " + "-i iterations (iterations)" + "-h high_priority_period (usecs)" + "-l low_priority_period (usecs)" + "-n nthreads (low priority thread)" + "-d (dump history) " + "\n", + argv [0]), + -1); + } + // Indicates sucessful parsing of the command line + return 0; +} + +int main (int argc, char *argv[]) +{ + TAO_EC_Default_Factory::init_svcs (); + + int low_priority = + ACE_Sched_Params::priority_min (ACE_SCHED_FIFO); + int process_priority = + ACE_Sched_Params::next_priority (ACE_SCHED_FIFO, + low_priority); + int high_priority = + ACE_Sched_Params::next_priority (ACE_SCHED_FIFO, + process_priority); + + // Enable FIFO scheduling, e.g., RT scheduling class on Solaris. + + if (ACE_OS::sched_params (ACE_Sched_Params (ACE_SCHED_FIFO, + process_priority, + ACE_SCOPE_PROCESS)) != 0) + { + if (ACE_OS::last_error () == EPERM) + { + ACE_DEBUG ((LM_DEBUG, + "server (%P|%t): user is not superuser, " + "test runs in time-shared class\n")); + } + else + ACE_ERROR ((LM_ERROR, + "server (%P|%t): sched_params failed\n")); + } + + ACE_TRY_NEW_ENV + { + CORBA::ORB_var orb = + CORBA::ORB_init (argc, argv, "" TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::Object_var manager_object = + orb->resolve_initial_references ("ORBPolicyManager" + TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::PolicyManager_var policy_manager = + CORBA::PolicyManager::_narrow (manager_object.in () + TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::Any sync_scope; + sync_scope <<= Messaging::SYNC_WITH_TARGET; + + CORBA::PolicyList policy_list (1); + policy_list.length (1); + policy_list[0] = + orb->create_policy (Messaging::SYNC_SCOPE_POLICY_TYPE, + sync_scope + TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + policy_manager->set_policy_overrides (policy_list, + CORBA::SET_OVERRIDE + TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + CORBA::Object_var poa_object = + orb->resolve_initial_references("RootPOA" TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + PortableServer::POA_var root_poa = + PortableServer::POA::_narrow (poa_object.in () TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (CORBA::is_nil (root_poa.in ())) + ACE_ERROR_RETURN ((LM_ERROR, + " (%P|%t) Panic: nil RootPOA\n"), + 1); + + POA_Destroyer destroy_poa (root_poa.in ()); + + PortableServer::POAManager_var poa_manager = + root_poa->the_POAManager (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + if (parse_args (argc, argv) != 0) + return 1; + + poa_manager->activate (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + TAO_EC_Event_Channel_Attributes attr (root_poa.in (), + root_poa.in ()); + TAO_EC_Event_Channel* ec_impl; + ACE_NEW_RETURN (ec_impl, + TAO_EC_Event_Channel (attr), + 1); + PortableServer::ServantBase_var ec_owner (ec_impl); + + ec_impl->activate (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + RtecEventChannelAdmin::EventChannel_var ec = + ec_impl->_this (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + poa_manager->activate (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + int thread_count = 1; + if (disable_low_priority == 0) + thread_count += nthreads; + ACE_Barrier barrier (thread_count); + + ACE_Auto_Basic_Array_Ptr > low_priority_suppliers (new Servant_var[nthreads]); + ACE_Auto_Basic_Array_Ptr > low_priority_consumers (new Servant_var[nthreads]); + ACE_Auto_Basic_Array_Ptr low_priority_tasks (new ECCL_Send_Task[nthreads]); + for (int i = 0; i != nthreads; ++i) + { + low_priority_suppliers[i] = + Servant_var (new ECCL_Supplier); + low_priority_suppliers[i]->connect (ec.in (), + ACE_ES_EVENT_UNDEFINED + 1 + i + TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + low_priority_consumers[i] = + Servant_var (new ECCL_Consumer (iterations)); + low_priority_consumers[i]->connect (ec.in (), + ACE_ES_EVENT_UNDEFINED + 1 + i + TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + low_priority_tasks[i].init (iterations, + low_priority_period, + ACE_ES_EVENT_UNDEFINED + 1 + i, + 1, + low_priority_suppliers[i], + &barrier); + + if (disable_low_priority == 0) + { + low_priority_tasks[i].activate (THR_NEW_LWP | THR_JOINABLE, + 1, 1, + low_priority); + } + } + + Servant_var consumer_impl (new ECCL_Consumer (iterations)); + consumer_impl->connect (ec.in (), ACE_ES_EVENT_UNDEFINED + TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + Servant_var supplier_impl (new ECCL_Supplier); + supplier_impl->connect (ec.in (), ACE_ES_EVENT_UNDEFINED + TAO_ENV_ARG_PARAMETER); + ACE_TRY_CHECK; + + ECCL_Send_Task high_priority_task; + high_priority_task.init (iterations, + high_priority_period, + ACE_ES_EVENT_UNDEFINED, + 1, + supplier_impl, + &barrier); + high_priority_task.activate (THR_NEW_LWP | THR_JOINABLE, + 1, 1, + high_priority); + + ACE_Thread_Manager::instance ()->wait (); + + ACE_DEBUG ((LM_DEBUG, "Calibrating high res timer ....")); + ACE_High_Res_Timer::calibrate (); + + ACE_UINT32 gsf = ACE_High_Res_Timer::global_scale_factor (); + ACE_DEBUG ((LM_DEBUG, "Done (%d)\n", gsf)); + + ACE_Sample_History &history = + consumer_impl->sample_history (); + if (do_dump_history) + { + history.dump_samples ("HISTORY", gsf); + } + + ACE_Basic_Stats high_priority_stats; + history.collect_basic_stats (high_priority_stats); + high_priority_stats.dump_results ("High Priority", gsf); + + ACE_Basic_Stats low_priority_stats; + for (int k = 0; k != nthreads; ++k) + { + low_priority_consumers[k]->sample_history ().collect_basic_stats (low_priority_stats); + } + low_priority_stats.dump_results ("Low Priority", gsf); + + supplier_impl->disconnect (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + consumer_impl->disconnect (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + for (int j = 0; j != nthreads; ++j) + { + low_priority_suppliers[j]->disconnect (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + low_priority_consumers[j]->disconnect (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } + + ec_impl->destroy (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + + ACE_DEBUG ((LM_DEBUG, "(%P|%t) server - event loop finished\n")); + + orb->destroy (TAO_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + "Exception caught:"); + return 1; + } + ACE_ENDTRY; + + return 0; +} + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) + +template class Servant_var; +template class Servant_var; +template class ACE_Auto_Basic_Array_Ptr >; +template class ACE_Auto_Basic_Array_Ptr >; +template class ACE_Auto_Basic_Array_Ptr; + +#elif defined(ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) + +#pragma instantiate Servant_var +#pragma instantiate Servant_var +#pragma instantiate ACE_Auto_Basic_Array_Ptr > +#pragma instantiate ACE_Auto_Basic_Array_Ptr > +#pragma instantiate ACE_Auto_Basic_Array_Ptr + +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/ec.supplier_filter_null.conf b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/ec.supplier_filter_null.conf new file mode 100644 index 00000000000..8df40ae7ad0 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/ec.supplier_filter_null.conf @@ -0,0 +1,2 @@ +# $Id$ +static EC_Factory "-ECSupplierFiltering null" diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/ec.supplier_filter_per_supplier.conf b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/ec.supplier_filter_per_supplier.conf new file mode 100644 index 00000000000..5fe9f00fce7 --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/ec.supplier_filter_per_supplier.conf @@ -0,0 +1,66 @@ +/** + * @file Consumer.h + * + * $Id$ + * + */ + +#ifndef ECCL_CONSUMER_H +#define ECCL_CONSUMER_H + +#include "orbsvcs/RtecEventCommS.h" +#include "orbsvcs/RtecEventChannelAdminC.h" +#include "ace/Sample_History.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +/** + * @class ECCL_Consumer + * + * @brief Implement a simple consumer to keep track of the latency + * + */ +class ECCL_Consumer + : public virtual POA_RtecEventComm::PushConsumer + , public virtual PortableServer::RefCountServantBase + +{ +public: + /// Constructor + ECCL_Consumer (int iterations); + + /// Connect to the event channel + void connect (RtecEventChannelAdmin::EventChannel_ptr ec, + int event_type + TAO_ENV_ARG_DECL); + + /// Disconnect from the event channel + void disconnect (TAO_ENV_SINGLE_ARG_DECL); + + /// Access the history of samples + ACE_Sample_History &sample_history (void); + + //@{ + /** @name The RtecEventComm::PushConsumer methods + */ + virtual void push (const RtecEventComm::EventSet& events + TAO_ENV_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)); + virtual void disconnect_push_consumer (TAO_ENV_SINGLE_ARG_DECL_NOT_USED) + ACE_THROW_SPEC ((CORBA::SystemException)); + //@} + +private: + /// Synchronize access to the internal data + TAO_SYNCH_MUTEX mutex_; + + /// The proxy this object is connected to + RtecEventChannelAdmin::ProxyPushSupplier_var proxy_supplier_; + + /// The history of latency samples + ACE_Sample_History sample_history_; +}; + +#endif /* ECCL_CONSUMER_H */ diff --git a/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/run_supplier_filtering.sh b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/run_supplier_filtering.sh new file mode 100755 index 00000000000..6c954c60d3d --- /dev/null +++ b/TAO/orbsvcs/performance-tests/EC_Colocated_Latency/run_supplier_filtering.sh @@ -0,0 +1,10 @@ +#! /bin/sh + +LOW_PRIORITY="1 20 40 60 80 100 120 140 160" + +for c in $LOW_PRIORITY; do + date + echo $c + ./driver -ORBSvcConf ec.supplier_filter_null.conf -z -i 50000 -n $c > ec_supplier_filter_null.$c.txt 2>&1 + ./driver -ORBSvcConf ec.supplier_filter_per_supplier.conf -z -i 50000 -n $c > ec_supplier_filter_per_supplier.$c.txt 2>&1 +done -- cgit v1.2.1