summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/Event
diff options
context:
space:
mode:
authorcoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-01-23 01:17:19 +0000
committercoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-01-23 01:17:19 +0000
commit1a92f1af1b4a71f056145f58d5f2a00a4f9b40cb (patch)
tree866650fae33a065dc64f3855c6efe20cd0c12221 /TAO/orbsvcs/tests/Event
parent5904a72c68d9ad9e7fa77a53fa0574b04e11e33a (diff)
downloadATCD-1a92f1af1b4a71f056145f58d5f2a00a4f9b40cb.tar.gz
ChangeLogTag:Sat Jan 22 17:04:14 2000 Carlos O'Ryan <coryan@uci.edu>
Diffstat (limited to 'TAO/orbsvcs/tests/Event')
-rw-r--r--TAO/orbsvcs/tests/Event/Basic/Atomic_Reconnect.cpp501
-rw-r--r--TAO/orbsvcs/tests/Event/Basic/Atomic_Reconnect.dsp102
-rw-r--r--TAO/orbsvcs/tests/Event/Basic/Atomic_Reconnect.h163
-rw-r--r--TAO/orbsvcs/tests/Event/Basic/Basic.dsw12
-rw-r--r--TAO/orbsvcs/tests/Event/Basic/Makefile354
-rw-r--r--TAO/orbsvcs/tests/Event/Basic/mt.svc.conf (renamed from TAO/orbsvcs/tests/Event/Basic/mt_disconnect.conf)0
-rwxr-xr-xTAO/orbsvcs/tests/Event/Basic/run_test.pl14
-rw-r--r--TAO/orbsvcs/tests/Event/Event.dsw15
8 files changed, 1158 insertions, 3 deletions
diff --git a/TAO/orbsvcs/tests/Event/Basic/Atomic_Reconnect.cpp b/TAO/orbsvcs/tests/Event/Basic/Atomic_Reconnect.cpp
new file mode 100644
index 00000000000..29e4b11d232
--- /dev/null
+++ b/TAO/orbsvcs/tests/Event/Basic/Atomic_Reconnect.cpp
@@ -0,0 +1,501 @@
+// $Id$
+
+#include "Atomic_Reconnect.h"
+
+#include "orbsvcs/Time_Utilities.h"
+#include "orbsvcs/Event_Utilities.h"
+#include "orbsvcs/Event/EC_Event_Channel.h"
+#include "orbsvcs/Event/EC_Default_Factory.h"
+
+ACE_RCSID(EC_Tests, Atomic_Reconnect, "$Id$")
+
+const int event_type = 20;
+const int event_source = 10;
+
+int
+main (int argc, char* argv[])
+{
+ TAO_EC_Default_Factory::init_svcs ();
+
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ // ORB initialization boiler plate...
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, argv, "", ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var object =
+ orb->resolve_initial_references ("RootPOA", ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ PortableServer::POA_var poa =
+ PortableServer::POA::_narrow (object.in (), ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ PortableServer::POAManager_var poa_manager =
+ poa->the_POAManager (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ poa_manager->activate (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ // ****************************************************************
+
+ TAO_EC_Event_Channel_Attributes attributes (poa.in (),
+ poa.in ());
+ attributes.consumer_reconnect = 1;
+ attributes.supplier_reconnect = 1;
+
+ TAO_EC_Event_Channel ec_impl (attributes);
+ ec_impl.activate (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ RtecEventChannelAdmin::EventChannel_var event_channel =
+ ec_impl._this (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+
+ // ****************************************************************
+
+ // Obtain the consumer admin..
+ RtecEventChannelAdmin::ConsumerAdmin_var consumer_admin =
+ event_channel->for_consumers (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ // ****************************************************************
+
+ const int milliseconds = 50;
+
+ Supplier supplier0;
+ Supplier supplier1;
+
+ supplier0.connect (event_channel.in (),
+ milliseconds,
+ event_source,
+ event_type,
+ event_source,
+ event_type,
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ Supplier second_supplier;
+
+ supplier1.connect (event_channel.in (),
+ milliseconds,
+ event_source,
+ event_type + 1,
+ event_source,
+ event_type + 1,
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ // ****************************************************************
+
+ Consumer consumer01 ("Consumer/010");
+ // Create a consumer, intialize its RT_Info structures, and
+ // connnect to the event channel....
+
+ ACE_ConsumerQOS_Factory consumer_qos0;
+ consumer_qos0.start_disjunction_group ();
+ consumer_qos0.insert (event_source, event_type, 0);
+
+ ACE_ConsumerQOS_Factory consumer_qos1;
+ consumer_qos1.start_disjunction_group ();
+ consumer_qos1.insert (event_source, event_type + 1, 0);
+
+ ACE_ConsumerQOS_Factory consumer_qos01;
+ consumer_qos01.start_disjunction_group ();
+ consumer_qos01.insert (event_source, event_type, 0);
+ consumer_qos01.insert (event_source, event_type + 1, 0);
+
+ consumer01.connect (consumer_admin.in (),
+ consumer_qos01.get_ConsumerQOS (),
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ Consumer consumer0 ("Consumer/0");
+ // Create a consumer, intialize its RT_Info structures, and
+ // connnect to the event channel....
+
+ consumer0.connect (consumer_admin.in (),
+ consumer_qos0.get_ConsumerQOS (),
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ Consumer consumer1 ("Consumer/1");
+ // Create a consumer, intialize its RT_Info structures, and
+ // connnect to the event channel....
+
+ consumer1.connect (consumer_admin.in (),
+ consumer_qos1.get_ConsumerQOS (),
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ // ****************************************************************
+
+ RtecEventComm::EventSet event0 (1);
+ event0.length (1);
+ event0[0].header.type = event_type;
+ event0[0].header.source = event_source;
+
+ RtecEventComm::EventSet event1 (1);
+ event1.length (1);
+ event1[0].header.type = event_type + 1;
+ event1[0].header.source = event_source;
+
+ // ****************************************************************
+
+ Task task0 (&supplier0, event0);
+ Task task1 (&supplier1, event1);
+
+ task0.activate ();
+ task1.activate ();
+
+ // ****************************************************************
+
+ const int iterations = 1000;
+
+ for (int i = 0; i != iterations; ++i)
+ {
+ ACE_Time_Value tv (0, 10000);
+ consumer0.connect (consumer_admin.in (),
+ consumer_qos0.get_ConsumerQOS (),
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ consumer1.connect (consumer_admin.in (),
+ consumer_qos1.get_ConsumerQOS (),
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ if (i % 2 == 0)
+ {
+ consumer01.connect (consumer_admin.in (),
+ consumer_qos0.get_ConsumerQOS (),
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ }
+ else
+ {
+ consumer01.connect (consumer_admin.in (),
+ consumer_qos01.get_ConsumerQOS (),
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ }
+
+ ACE_OS::sleep (tv);
+ }
+
+ task0.stop ();
+ task1.stop ();
+
+ ACE_Thread_Manager::instance ()->wait ();
+
+
+ // ****************************************************************
+
+ // Cleanup..
+
+ consumer01.disconnect (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ consumer1.disconnect (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ consumer0.disconnect (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ // ****************************************************************
+
+ supplier1.disconnect (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ supplier0.disconnect (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ // ****************************************************************
+
+ event_channel->destroy (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ // ****************************************************************
+
+ poa->destroy (1, 1, ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ // ****************************************************************
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Supplier 0 pushed %d events\n", task0.push_count ()));
+ ACE_DEBUG ((LM_DEBUG,
+ "Supplier 1 pushed %d events\n", task1.push_count ()));
+ consumer0.dump_results (task0.push_count (), 5);
+ consumer1.dump_results (task1.push_count (), 5);
+ CORBA::ULong max = task0.push_count () + task1.push_count ();
+ if (consumer01.event0_count != task0.push_count ()
+ || consumer01.event_count > max)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "ERROR - %s unexpected number of events <%d,%d>\n",
+ "Consumer/01",
+ consumer01.event0_count,
+ consumer01.event_count));
+ }
+ else
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Consumer/01 number of events "
+ "<%d,%d> within margins\n",
+ consumer01.event0_count,
+ consumer01.event_count));
+ }
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Service");
+ return 1;
+ }
+ ACE_ENDTRY;
+ return 0;
+}
+
+// ****************************************************************
+
+Task::Task (Supplier *s,
+ const RtecEventComm::EventSet &e)
+ : supplier_ (s),
+ event_ (e),
+ stop_flag_ (0),
+ push_count_ (0)
+{
+}
+
+int
+Task::svc ()
+{
+ ACE_TRY_NEW_ENV
+ {
+ this->run (ACE_TRY_ENV);
+ }
+ ACE_CATCHANY
+ {
+ return -1;
+ }
+ ACE_ENDTRY;
+ return 0;
+}
+
+void
+Task::stop (void)
+{
+ ACE_GUARD (ACE_SYNCH_MUTEX, ace_mon, this->lock_);
+ this->stop_flag_ = 1;
+}
+
+CORBA::ULong
+Task::push_count (void)
+{
+ return this->push_count_;
+}
+
+void
+Task::run (CORBA::Environment &ACE_TRY_ENV)
+{
+ int stop = 0;
+ do {
+ this->supplier_->push (this->event_, ACE_TRY_ENV);
+ ACE_CHECK;
+
+ // Sleep for a short time to avoid spinning...
+ ACE_OS::sleep (0);
+
+ ACE_GUARD (ACE_SYNCH_MUTEX, ace_mon, this->lock_);
+
+ this->push_count_++;
+
+ stop = this->stop_flag_;
+ } while (stop == 0);
+}
+
+// ****************************************************************
+
+Consumer::Consumer (const char* name)
+ : event_count (0),
+ event0_count (0),
+ name_ (name)
+{
+}
+
+void
+Consumer::connect (RtecEventChannelAdmin::ConsumerAdmin_ptr consumer_admin,
+ const RtecEventChannelAdmin::ConsumerQOS &qos,
+ CORBA::Environment &ACE_TRY_ENV)
+{
+ if (CORBA::is_nil (this->supplier_proxy_.in ()))
+ {
+ this->supplier_proxy_ =
+ consumer_admin->obtain_push_supplier (ACE_TRY_ENV);
+ ACE_CHECK;
+ }
+
+ // The canonical protocol to connect to the EC
+
+ RtecEventComm::PushConsumer_var consumer =
+ this->_this (ACE_TRY_ENV);
+ ACE_CHECK;
+
+ this->supplier_proxy_->connect_push_consumer (consumer.in (),
+ qos,
+ ACE_TRY_ENV);
+ ACE_CHECK;
+}
+
+void
+Consumer::disconnect (CORBA::Environment &ACE_TRY_ENV)
+{
+ this->supplier_proxy_->disconnect_push_supplier (ACE_TRY_ENV);
+ ACE_CHECK;
+
+ PortableServer::POA_var consumer_poa =
+ this->_default_POA (ACE_TRY_ENV);
+ ACE_CHECK;
+ PortableServer::ObjectId_var consumer_id =
+ consumer_poa->servant_to_id (this, ACE_TRY_ENV);
+ ACE_CHECK;
+ consumer_poa->deactivate_object (consumer_id.in (), ACE_TRY_ENV);
+ ACE_CHECK;
+}
+
+void
+Consumer::dump_results (int expected_count,
+ int tolerance)
+{
+ int diff = expected_count - event_count;
+ if (diff > tolerance || diff < -tolerance)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "ERROR - %s unexpected number of events <%d>\n",
+ this->name_,
+ this->event_count));
+ }
+ else
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "%s - number of events <%d> within margins\n",
+ this->name_,
+ this->event_count));
+ }
+}
+
+void
+Consumer::push (const RtecEventComm::EventSet& events,
+ CORBA::Environment &)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ if (events.length () == 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "%s (%P|%t) no events\n", this->name_));
+ return;
+ }
+
+ ACE_GUARD (ACE_SYNCH_MUTEX, ace_mon, this->lock_);
+ this->event_count++;
+ if (events[0].header.type == event_type)
+ this->event0_count++;
+#if 0
+ if (this->event_count % 10 == 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "%s (%P|%t): %d events received\n",
+ this->name_,
+ this->event_count));
+ }
+#endif /* 0 */
+}
+
+void
+Consumer::disconnect_push_consumer (CORBA::Environment &)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+// ****************************************************************
+
+Supplier::Supplier (void)
+ : event_source_ (-1),
+ event_type_ (ACE_ES_EVENT_UNDEFINED)
+{
+}
+
+void
+Supplier::connect (RtecEventChannelAdmin::EventChannel_ptr event_channel,
+ int /* milliseconds */,
+ int published_source,
+ int published_type,
+ int event_source,
+ int event_type,
+ CORBA::Environment &ACE_TRY_ENV)
+{
+ this->event_source_ = event_source;
+ this->event_type_ = event_type;
+
+ RtecEventChannelAdmin::SupplierAdmin_var supplier_admin =
+ event_channel->for_suppliers (ACE_TRY_ENV);
+ ACE_CHECK;
+
+ RtecEventComm::PushSupplier_var supplier =
+ this->_this (ACE_TRY_ENV);
+ ACE_CHECK;
+
+ this->consumer_proxy_ =
+ supplier_admin->obtain_push_consumer (ACE_TRY_ENV);
+ ACE_CHECK;
+
+ ACE_SupplierQOS_Factory supplier_qos;
+ supplier_qos.insert (published_source,
+ published_type,
+ 0, 1);
+
+ this->consumer_proxy_->connect_push_supplier (supplier.in (),
+ supplier_qos.get_SupplierQOS (),
+ ACE_TRY_ENV);
+ ACE_CHECK;
+}
+
+void
+Supplier::disconnect (CORBA::Environment &ACE_TRY_ENV)
+{
+ this->consumer_proxy_->disconnect_push_consumer (ACE_TRY_ENV);
+ ACE_CHECK;
+
+ PortableServer::POA_var supplier_poa =
+ this->_default_POA (ACE_TRY_ENV);
+ ACE_CHECK;
+ PortableServer::ObjectId_var supplier_id =
+ supplier_poa->servant_to_id (this, ACE_TRY_ENV);
+ ACE_CHECK;
+ supplier_poa->deactivate_object (supplier_id.in (), ACE_TRY_ENV);
+ ACE_CHECK;
+}
+
+void
+Supplier::push (const RtecEventComm::EventSet &event,
+ CORBA::Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ this->consumer_proxy_->push (event, ACE_TRY_ENV);
+}
+
+void
+Supplier::disconnect_push_consumer (CORBA::Environment &)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+void
+Supplier::disconnect_push_supplier (CORBA::Environment &)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+}
+
+// ****************************************************************
+
+#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/tests/Event/Basic/Atomic_Reconnect.dsp b/TAO/orbsvcs/tests/Event/Basic/Atomic_Reconnect.dsp
new file mode 100644
index 00000000000..dd6349530cf
--- /dev/null
+++ b/TAO/orbsvcs/tests/Event/Basic/Atomic_Reconnect.dsp
@@ -0,0 +1,102 @@
+# Microsoft Developer Studio Project File - Name="Atomic_Reconnect" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Atomic_Reconnect - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Atomic_Reconnect.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Atomic_Reconnect.mak" CFG="Atomic_Reconnect - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Atomic_Reconnect - Win32 Release" (based on\
+ "Win32 (x86) Console Application")
+!MESSAGE "Atomic_Reconnect - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Atomic_Reconnect - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\lib" /I "..\..\.." /I "..\..\..\.." /I "..\..\..\..\.." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 ECTest.lib orbsvcs.lib TAO.lib ace.lib /nologo /subsystem:console /machine:I386 /libpath:"..\lib" /libpath:"..\..\..\orbsvcs" /libpath:"..\..\..\..\tao" /libpath:"..\..\..\..\..\ace"
+
+!ELSEIF "$(CFG)" == "Atomic_Reconnect - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir ""
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "..\lib" /I "..\..\.." /I "..\..\..\.." /I "..\..\..\..\.." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 ECTestd.lib orbsvcsd.lib TAOd.lib aced.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\lib" /libpath:"..\..\..\orbsvcs" /libpath:"..\..\..\..\tao" /libpath:"..\..\..\..\..\ace"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Atomic_Reconnect - Win32 Release"
+# Name "Atomic_Reconnect - Win32 Debug"
+# Begin Group "Header Files"
+
+# PROP Default_Filter ".h"
+# Begin Source File
+
+SOURCE=.\Atomic_Reconnect.h
+# End Source File
+# End Group
+# Begin Group "Source Files"
+
+# PROP Default_Filter ".cpp"
+# Begin Source File
+
+SOURCE=.\Atomic_Reconnect.cpp
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/orbsvcs/tests/Event/Basic/Atomic_Reconnect.h b/TAO/orbsvcs/tests/Event/Basic/Atomic_Reconnect.h
new file mode 100644
index 00000000000..9502d9cfdcd
--- /dev/null
+++ b/TAO/orbsvcs/tests/Event/Basic/Atomic_Reconnect.h
@@ -0,0 +1,163 @@
+/* -*- C++ -*- */
+// $Id$
+//
+// ============================================================================
+//
+// = LIBRARY
+// ORBSVCS Real-time Event Channel tests
+//
+// = FILENAME
+// Atomic_Reconnect.h
+//
+// = AUTHOR
+// Carlos O'Ryan (coryan@cs.wustl.edu)
+//
+// ============================================================================
+
+#ifndef EC_ATOMIC_RECONNECT_H
+#define EC_ATOMIC_RECONNECT_H
+
+#include "orbsvcs/Channel_Clients.h"
+#include "orbsvcs/RtecEventChannelAdminS.h"
+#include "ace/Task.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+class Consumer : public POA_RtecEventComm::PushConsumer
+{
+ // = TITLE
+ // Simple consumer object
+ //
+ // = DESCRIPTION
+ //
+public:
+ Consumer (const char* name);
+ // Constructor
+
+ void connect (RtecEventChannelAdmin::ConsumerAdmin_ptr consumer_admin,
+ const RtecEventChannelAdmin::ConsumerQOS &qos,
+ CORBA::Environment &ACE_TRY_ENV);
+ void disconnect (CORBA::Environment &ACE_TRY_ENV);
+ // Simple connect/disconnect methods..
+
+ void dump_results (int expected_count,
+ int tolerance);
+ // Print out an error message if the event count is too far from the
+ // expected count.
+
+ // = The RtecEventComm::PushConsumer methods
+
+ virtual void push (const RtecEventComm::EventSet& events,
+ CORBA::Environment &_env)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+ virtual void disconnect_push_consumer (CORBA::Environment &)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+ // The skeleton methods.
+
+ CORBA::ULong event_count;
+ // Keep track of the number of events received.
+
+ CORBA::ULong event0_count;
+ // Number of events of type "0" received.
+
+private:
+ RtecEventChannelAdmin::ProxyPushSupplier_var supplier_proxy_;
+ // The proxy
+
+ const char* name_;
+ // The name
+
+ ACE_SYNCH_MUTEX lock_;
+ // Synchronize access to the counter
+};
+
+class Supplier : public POA_RtecEventComm::PushSupplier
+{
+ // = TITLE
+ // Simple supplier object
+ //
+ // = DESCRIPTION
+ // This class is a supplier of events.
+ // It simply register for two event typesone event type
+ // The class is just a helper to simplify common tasks in EC
+ // tests, such as subscribing for a range of events, disconnecting
+ // from the EC, informing the driver of shutdown messages, etc.
+ //
+ // There are several ways to connect and disconnect this class,
+ // and it is up to the driver program to use the right one.
+ //
+public:
+ Supplier (void);
+ // Constructor
+
+ // = The RtecEventComm::PushSupplier methods
+
+ void connect (RtecEventChannelAdmin::EventChannel_ptr ec,
+ int milliseconds,
+ int published_source,
+ int published_type,
+ int event_source,
+ int event_type,
+ CORBA::Environment &ACE_TRY_ENV);
+ void disconnect (CORBA::Environment &ACE_TRY_ENV);
+ // Simple connect/disconnect methods..
+
+ void push (const RtecEventComm::EventSet& events,
+ CORBA::Environment &_env)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+ void disconnect_push_consumer (CORBA::Environment &)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+ // The Consumer side methods.
+
+ virtual void disconnect_push_supplier (CORBA::Environment &)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+ // The skeleton methods.
+
+private:
+ RtecEventChannelAdmin::ProxyPushConsumer_var consumer_proxy_;
+ // Our proxy
+
+ int event_source_;
+ // The event source
+
+ int event_type_;
+ // The event type
+};
+
+// ****************************************************************
+
+class Task : public ACE_Task_Base
+{
+public:
+ Task (Supplier *supplier,
+ const RtecEventComm::EventSet &event);
+ // Create the task...
+
+ // = Check the ACE_Task_Base documentation.
+ int svc (void);
+
+ void stop (void);
+ CORBA::ULong push_count (void);
+
+ void run (CORBA::Environment &ACE_TRY_ENV);
+ // Run a single iteration of the test
+
+private:
+ Supplier *supplier_;
+ // The supplier we are turning into an active object
+
+ RtecEventComm::EventSet event_;
+ // The event we push through the supplier
+
+ int stop_flag_;
+ // Set to 1 when the test must stop
+
+ CORBA::ULong push_count_;
+ // Count the number of push() calls
+
+ ACE_SYNCH_MUTEX lock_;
+};
+
+#endif /* EC_ATOMIC_RECONNECT_H */
diff --git a/TAO/orbsvcs/tests/Event/Basic/Basic.dsw b/TAO/orbsvcs/tests/Event/Basic/Basic.dsw
index 03992bcdbee..5f0e6b3a891 100644
--- a/TAO/orbsvcs/tests/Event/Basic/Basic.dsw
+++ b/TAO/orbsvcs/tests/Event/Basic/Basic.dsw
@@ -123,6 +123,18 @@ Package=<4>
###############################################################################
+Project: "Atomic_Reconnect"=.\Atomic_Reconnect.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
Global:
Package=<5>
diff --git a/TAO/orbsvcs/tests/Event/Basic/Makefile b/TAO/orbsvcs/tests/Event/Basic/Makefile
index aa18fbebe9a..5bc87b037ea 100644
--- a/TAO/orbsvcs/tests/Event/Basic/Makefile
+++ b/TAO/orbsvcs/tests/Event/Basic/Makefile
@@ -21,7 +21,8 @@ BIN2 = Reconnect \
Wildcard \
Negation \
Disconnect \
- MT_Disconnect
+ MT_Disconnect \
+ Atomic_Reconnect
#### If the orbsvcs library wasn't built with all components, don't
#### try to build certain tests.
@@ -3099,6 +3100,127 @@ endif
$(TAO_ROOT)/orbsvcs/orbsvcs/Event/EC_Default_Factory.i
.obj/MT_Disconnect.o .obj/MT_Disconnect.so .shobj/MT_Disconnect.o .shobj/MT_Disconnect.so: MT_Disconnect.cpp MT_Disconnect.h \
+ $(ACE_ROOT)/ace/Task.h \
+ $(ACE_ROOT)/ace/Service_Object.h \
+ $(ACE_ROOT)/ace/Shared_Object.h \
+ $(ACE_ROOT)/ace/ACE.h \
+ $(ACE_ROOT)/ace/OS.h \
+ $(ACE_ROOT)/ace/inc_user_config.h \
+ $(ACE_ROOT)/ace/Min_Max.h \
+ $(ACE_ROOT)/ace/streams.h \
+ $(ACE_ROOT)/ace/Basic_Types.h \
+ $(ACE_ROOT)/ace/Basic_Types.i \
+ $(ACE_ROOT)/ace/Trace.h \
+ $(ACE_ROOT)/ace/OS.i \
+ $(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/ACE.i \
+ $(ACE_ROOT)/ace/Shared_Object.i \
+ $(ACE_ROOT)/ace/Event_Handler.h \
+ $(ACE_ROOT)/ace/Event_Handler.i \
+ $(ACE_ROOT)/ace/Service_Object.i \
+ $(ACE_ROOT)/ace/Thread_Manager.h \
+ $(ACE_ROOT)/ace/Thread.h \
+ $(ACE_ROOT)/ace/Thread.i \
+ $(ACE_ROOT)/ace/Synch.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/Synch.i \
+ $(ACE_ROOT)/ace/Synch_T.h \
+ $(ACE_ROOT)/ace/Synch_T.i \
+ $(ACE_ROOT)/ace/Atomic_Op.i \
+ $(ACE_ROOT)/ace/Synch_T.cpp \
+ $(ACE_ROOT)/ace/Containers.h \
+ $(ACE_ROOT)/ace/Malloc_Base.h \
+ $(ACE_ROOT)/ace/Containers.i \
+ $(ACE_ROOT)/ace/Containers_T.h \
+ $(ACE_ROOT)/ace/Containers_T.i \
+ $(ACE_ROOT)/ace/Containers_T.cpp \
+ $(ACE_ROOT)/ace/Malloc.h \
+ $(ACE_ROOT)/ace/Malloc.i \
+ $(ACE_ROOT)/ace/Malloc_T.h \
+ $(ACE_ROOT)/ace/Free_List.h \
+ $(ACE_ROOT)/ace/Free_List.i \
+ $(ACE_ROOT)/ace/Free_List.cpp \
+ $(ACE_ROOT)/ace/Malloc_T.i \
+ $(ACE_ROOT)/ace/Malloc_T.cpp \
+ $(ACE_ROOT)/ace/Memory_Pool.h \
+ $(ACE_ROOT)/ace/Signal.h \
+ $(ACE_ROOT)/ace/Signal.i \
+ $(ACE_ROOT)/ace/Mem_Map.h \
+ $(ACE_ROOT)/ace/Mem_Map.i \
+ $(ACE_ROOT)/ace/Memory_Pool.i \
+ $(ACE_ROOT)/ace/Singleton.h \
+ $(ACE_ROOT)/ace/Singleton.i \
+ $(ACE_ROOT)/ace/Singleton.cpp \
+ $(ACE_ROOT)/ace/Object_Manager.h \
+ $(ACE_ROOT)/ace/Object_Manager.i \
+ $(ACE_ROOT)/ace/Managed_Object.h \
+ $(ACE_ROOT)/ace/Managed_Object.i \
+ $(ACE_ROOT)/ace/Managed_Object.cpp \
+ $(ACE_ROOT)/ace/Thread_Manager.i \
+ $(ACE_ROOT)/ace/Task.i \
+ $(ACE_ROOT)/ace/Task_T.h \
+ $(ACE_ROOT)/ace/Message_Queue.h \
+ $(ACE_ROOT)/ace/Message_Block.h \
+ $(ACE_ROOT)/ace/Message_Block.i \
+ $(ACE_ROOT)/ace/Message_Block_T.h \
+ $(ACE_ROOT)/ace/Message_Block_T.i \
+ $(ACE_ROOT)/ace/Message_Block_T.cpp \
+ $(ACE_ROOT)/ace/IO_Cntl_Msg.h \
+ $(ACE_ROOT)/ace/Message_Queue_T.h \
+ $(ACE_ROOT)/ace/Message_Queue_T.i \
+ $(ACE_ROOT)/ace/Message_Queue_T.cpp \
+ $(ACE_ROOT)/ace/Strategies.h \
+ $(ACE_ROOT)/ace/Strategies_T.h \
+ $(ACE_ROOT)/ace/Service_Config.h \
+ $(ACE_ROOT)/ace/SString.h \
+ $(ACE_ROOT)/ace/SString.i \
+ $(ACE_ROOT)/ace/Service_Config.i \
+ $(ACE_ROOT)/ace/Reactor.h \
+ $(ACE_ROOT)/ace/Handle_Set.h \
+ $(ACE_ROOT)/ace/Handle_Set.i \
+ $(ACE_ROOT)/ace/Timer_Queue.h \
+ $(ACE_ROOT)/ace/Timer_Queue_T.h \
+ $(ACE_ROOT)/ace/Timer_Queue_T.i \
+ $(ACE_ROOT)/ace/Timer_Queue_T.cpp \
+ $(ACE_ROOT)/ace/Reactor.i \
+ $(ACE_ROOT)/ace/Reactor_Impl.h \
+ $(ACE_ROOT)/ace/Svc_Conf_Tokens.h \
+ $(ACE_ROOT)/ace/Synch_Options.h \
+ $(ACE_ROOT)/ace/Synch_Options.i \
+ $(ACE_ROOT)/ace/Hash_Map_Manager.h \
+ $(ACE_ROOT)/ace/Functor.h \
+ $(ACE_ROOT)/ace/Functor.i \
+ $(ACE_ROOT)/ace/Functor_T.h \
+ $(ACE_ROOT)/ace/Functor_T.i \
+ $(ACE_ROOT)/ace/Functor_T.cpp \
+ $(ACE_ROOT)/ace/Hash_Map_Manager.i \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.h \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.i \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
+ $(ACE_ROOT)/ace/Strategies_T.i \
+ $(ACE_ROOT)/ace/Strategies_T.cpp \
+ $(ACE_ROOT)/ace/Service_Repository.h \
+ $(ACE_ROOT)/ace/Service_Types.h \
+ $(ACE_ROOT)/ace/Service_Types.i \
+ $(ACE_ROOT)/ace/Service_Repository.i \
+ $(ACE_ROOT)/ace/WFMO_Reactor.h \
+ $(ACE_ROOT)/ace/WFMO_Reactor.i \
+ $(ACE_ROOT)/ace/Strategies.i \
+ $(ACE_ROOT)/ace/Message_Queue.i \
+ $(ACE_ROOT)/ace/Task_T.i \
+ $(ACE_ROOT)/ace/Task_T.cpp \
+ $(ACE_ROOT)/ace/Module.h \
+ $(ACE_ROOT)/ace/Module.i \
+ $(ACE_ROOT)/ace/Module.cpp \
+ $(ACE_ROOT)/ace/Stream_Modules.h \
+ $(ACE_ROOT)/ace/Stream_Modules.i \
+ $(ACE_ROOT)/ace/Stream_Modules.cpp \
$(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminS.h \
$(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS.h \
$(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS.h \
@@ -3108,6 +3230,222 @@ endif
$(TAO_ROOT)/tao/CDR.h \
$(TAO_ROOT)/tao/corbafwd.h \
$(ACE_ROOT)/ace/CDR_Stream.h \
+ $(ACE_ROOT)/ace/CDR_Stream.i \
+ $(TAO_ROOT)/tao/try_macros.h \
+ $(TAO_ROOT)/tao/orbconf.h \
+ $(ACE_ROOT)/ace/CORBA_macros.h \
+ $(TAO_ROOT)/tao/corbafwd.i \
+ $(TAO_ROOT)/tao/Typecode.h \
+ $(TAO_ROOT)/tao/Exception.h \
+ $(TAO_ROOT)/tao/Exception.i \
+ $(TAO_ROOT)/tao/Typecode.i \
+ $(TAO_ROOT)/tao/CDR.i \
+ $(TAO_ROOT)/tao/Environment.h \
+ $(TAO_ROOT)/tao/Environment.i \
+ $(TAO_ROOT)/tao/Object.h \
+ $(TAO_ROOT)/tao/Object.i \
+ $(TAO_ROOT)/tao/Any.i \
+ $(TAO_ROOT)/tao/TimeBaseC.i \
+ $(TAO_ROOT)/tao/TimeBaseS_T.h \
+ $(TAO_ROOT)/tao/TimeBaseS_T.i \
+ $(TAO_ROOT)/tao/TimeBaseS_T.cpp \
+ $(TAO_ROOT)/tao/TimeBaseS.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseC.h \
+ $(TAO_ROOT)/tao/corba.h \
+ $(TAO_ROOT)/tao/ORB.h \
+ $(TAO_ROOT)/tao/IOR_LookupTable.h \
+ $(TAO_ROOT)/tao/Services.h \
+ $(TAO_ROOT)/tao/Sequence.h \
+ $(TAO_ROOT)/tao/Managed_Types.h \
+ $(TAO_ROOT)/tao/Managed_Types.i \
+ $(TAO_ROOT)/tao/Sequence.i \
+ $(TAO_ROOT)/tao/Sequence_T.h \
+ $(TAO_ROOT)/tao/Sequence_T.i \
+ $(TAO_ROOT)/tao/Sequence_T.cpp \
+ $(TAO_ROOT)/tao/varout.h \
+ $(TAO_ROOT)/tao/varout.i \
+ $(TAO_ROOT)/tao/varout.cpp \
+ $(TAO_ROOT)/tao/Services.i \
+ $(TAO_ROOT)/tao/IORManipulation.h \
+ $(TAO_ROOT)/tao/IORS.h \
+ $(TAO_ROOT)/tao/IORC.h \
+ $(TAO_ROOT)/tao/IORC.i \
+ $(TAO_ROOT)/tao/Servant_Base.h \
+ $(TAO_ROOT)/tao/POAC.h \
+ $(TAO_ROOT)/tao/PolicyC.h \
+ $(TAO_ROOT)/tao/CurrentC.h \
+ $(TAO_ROOT)/tao/CurrentC.i \
+ $(TAO_ROOT)/tao/PolicyC.i \
+ $(TAO_ROOT)/tao/POAC.i \
+ $(TAO_ROOT)/tao/Servant_Base.i \
+ $(TAO_ROOT)/tao/IORS.i \
+ $(TAO_ROOT)/tao/Interceptor.h \
+ $(TAO_ROOT)/tao/InterceptorS.h \
+ $(TAO_ROOT)/tao/InterceptorC.h \
+ $(TAO_ROOT)/tao/IOPC.h \
+ $(TAO_ROOT)/tao/IOPC.i \
+ $(TAO_ROOT)/tao/InterceptorC.i \
+ $(TAO_ROOT)/tao/Interceptor.i \
+ $(TAO_ROOT)/tao/ORB.i \
+ $(TAO_ROOT)/tao/NVList.h \
+ $(TAO_ROOT)/tao/NVList.i \
+ $(TAO_ROOT)/tao/Principal.h \
+ $(TAO_ROOT)/tao/Principal.i \
+ $(TAO_ROOT)/tao/Request.h \
+ $(TAO_ROOT)/tao/Context.h \
+ $(TAO_ROOT)/tao/Context.i \
+ $(TAO_ROOT)/tao/MessagingC.h \
+ $(TAO_ROOT)/tao/PollableC.h \
+ $(TAO_ROOT)/tao/MessagingC.i \
+ $(TAO_ROOT)/tao/Request.i \
+ $(TAO_ROOT)/tao/Server_Request.h \
+ $(TAO_ROOT)/tao/Object_KeyC.h \
+ $(TAO_ROOT)/tao/Object_KeyC.i \
+ $(TAO_ROOT)/tao/GIOP.h \
+ $(TAO_ROOT)/tao/GIOP.i \
+ $(TAO_ROOT)/tao/Server_Request.i \
+ $(TAO_ROOT)/tao/Marshal.h \
+ $(TAO_ROOT)/tao/Marshal.i \
+ $(TAO_ROOT)/tao/singletons.h \
+ $(TAO_ROOT)/tao/POA.h \
+ $(TAO_ROOT)/tao/Object_Adapter.h \
+ $(TAO_ROOT)/tao/Key_Adapters.h \
+ $(ACE_ROOT)/ace/Map.h \
+ $(ACE_ROOT)/ace/Map.i \
+ $(ACE_ROOT)/ace/Map_T.h \
+ $(ACE_ROOT)/ace/Pair.h \
+ $(ACE_ROOT)/ace/Pair.i \
+ $(ACE_ROOT)/ace/Pair_T.h \
+ $(ACE_ROOT)/ace/Pair_T.i \
+ $(ACE_ROOT)/ace/Pair_T.cpp \
+ $(ACE_ROOT)/ace/Map_Manager.h \
+ $(ACE_ROOT)/ace/Map_Manager.i \
+ $(ACE_ROOT)/ace/Map_Manager.cpp \
+ $(ACE_ROOT)/ace/Active_Map_Manager.h \
+ $(ACE_ROOT)/ace/Active_Map_Manager.i \
+ $(ACE_ROOT)/ace/Active_Map_Manager_T.h \
+ $(ACE_ROOT)/ace/Active_Map_Manager_T.i \
+ $(ACE_ROOT)/ace/Active_Map_Manager_T.cpp \
+ $(ACE_ROOT)/ace/Map_T.i \
+ $(ACE_ROOT)/ace/Map_T.cpp \
+ $(TAO_ROOT)/tao/Key_Adapters.i \
+ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \
+ $(TAO_ROOT)/tao/poa_macros.h \
+ $(TAO_ROOT)/tao/POAS.h \
+ $(TAO_ROOT)/tao/POA_CORBA.h \
+ $(TAO_ROOT)/tao/DynAnyC.h \
+ $(TAO_ROOT)/tao/DynAnyC.i \
+ $(TAO_ROOT)/tao/DomainC.h \
+ $(TAO_ROOT)/tao/DomainC.i \
+ $(TAO_ROOT)/tao/POAS.i \
+ $(TAO_ROOT)/tao/Active_Object_Map.h \
+ $(TAO_ROOT)/tao/Active_Object_Map.i \
+ $(TAO_ROOT)/tao/Object_Adapter.i \
+ $(TAO_ROOT)/tao/POAManager.h \
+ $(TAO_ROOT)/tao/POAManager.i \
+ $(TAO_ROOT)/tao/ImplRepoC.h \
+ $(TAO_ROOT)/tao/Operation_Table.h \
+ $(TAO_ROOT)/tao/Stub.h \
+ $(TAO_ROOT)/tao/Pluggable.h \
+ $(TAO_ROOT)/tao/Pluggable.i \
+ $(TAO_ROOT)/tao/MProfile.h \
+ $(TAO_ROOT)/tao/Profile.h \
+ $(TAO_ROOT)/tao/Tagged_Components.h \
+ $(TAO_ROOT)/tao/CONV_FRAMEC.h \
+ $(TAO_ROOT)/tao/CONV_FRAMEC.i \
+ $(TAO_ROOT)/tao/Tagged_Components.i \
+ $(TAO_ROOT)/tao/Profile.i \
+ $(TAO_ROOT)/tao/MProfile.i \
+ $(TAO_ROOT)/tao/Stub.i \
+ $(TAO_ROOT)/tao/ORB_Core.h \
+ $(TAO_ROOT)/tao/Policy_Manager.h \
+ $(TAO_ROOT)/tao/Policy_Manager.i \
+ $(TAO_ROOT)/tao/Resource_Factory.h \
+ $(TAO_ROOT)/tao/Protocol_Factory.h \
+ $(TAO_ROOT)/tao/params.h \
+ $(TAO_ROOT)/tao/params.i \
+ $(TAO_ROOT)/tao/ORB_Core.i \
+ $(ACE_ROOT)/ace/Dynamic_Service.h \
+ $(ACE_ROOT)/ace/Dynamic_Service.cpp \
+ $(TAO_ROOT)/tao/Invocation.h \
+ $(TAO_ROOT)/tao/Reply_Dispatcher.h \
+ $(TAO_ROOT)/tao/Reply_Dispatcher.i \
+ $(TAO_ROOT)/tao/TAOC.h \
+ $(TAO_ROOT)/tao/TAOC.i \
+ $(TAO_ROOT)/tao/Invocation.i \
+ $(TAO_ROOT)/tao/ImplRepoC.i \
+ $(TAO_ROOT)/tao/POA.i \
+ $(TAO_ROOT)/tao/debug.h \
+ $(TAO_ROOT)/tao/Client_Strategy_Factory.h \
+ $(TAO_ROOT)/tao/InconsistentTypeCodeC.h \
+ $(TAO_ROOT)/tao/DynAny_i.h \
+ $(TAO_ROOT)/tao/Union.h \
+ $(TAO_ROOT)/tao/ValueBase.h \
+ $(TAO_ROOT)/tao/ValueBase.i \
+ $(TAO_ROOT)/tao/ValueFactory.h \
+ $(TAO_ROOT)/tao/ValueFactory.i \
+ $(TAO_ROOT)/tao/ObjectIDList.h \
+ $(TAO_ROOT)/tao/ObjectIDList.i \
+ $(TAO_ROOT)/tao/WrongTransactionC.h \
+ $(TAO_ROOT)/tao/InterfaceC.h \
+ $(TAO_ROOT)/tao/BoundsC.h \
+ $(TAO_ROOT)/tao/BoundsC.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/orbsvcs_export.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseC.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS_T.cpp \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataC.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataC.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS_T.cpp \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecDefaultEventDataS.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommC.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommC.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.cpp \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecSchedulerS.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecSchedulerC.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecSchedulerC.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecSchedulerS_T.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecSchedulerS_T.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecSchedulerS_T.cpp \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecSchedulerS.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminC.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminC.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminS_T.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminS_T.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminS_T.cpp \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminS.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Time_Utilities.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Time_Utilities.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Event_Utilities.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Event_Service_Constants.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Event_Utilities.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Event/EC_Event_Channel.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Event/EC_Factory.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Event/EC_Factory.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Event/EC_Defaults.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Event/EC_Event_Channel.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Event/EC_Default_Factory.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Event/EC_Default_Factory.i
+
+.obj/Atomic_Reconnect.o .obj/Atomic_Reconnect.so .shobj/Atomic_Reconnect.o .shobj/Atomic_Reconnect.so: Atomic_Reconnect.cpp Atomic_Reconnect.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Channel_Clients.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Channel_Clients_T.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS.h \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/TimeBaseS.h \
+ $(TAO_ROOT)/tao/TimeBaseS.h \
+ $(TAO_ROOT)/tao/TimeBaseC.h \
+ $(TAO_ROOT)/tao/Any.h \
+ $(TAO_ROOT)/tao/CDR.h \
+ $(TAO_ROOT)/tao/corbafwd.h \
+ $(ACE_ROOT)/ace/CDR_Stream.h \
$(ACE_ROOT)/ace/Message_Block.h \
$(ACE_ROOT)/ace/ACE.h \
$(ACE_ROOT)/ace/OS.h \
@@ -3397,6 +3735,9 @@ endif
$(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.i \
$(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS_T.cpp \
$(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventCommS.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Channel_Clients_T.i \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/Channel_Clients_T.cpp \
+ $(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminS.h \
$(TAO_ROOT)/orbsvcs/orbsvcs/RtecSchedulerS.h \
$(TAO_ROOT)/orbsvcs/orbsvcs/RtecSchedulerC.h \
$(TAO_ROOT)/orbsvcs/orbsvcs/RtecSchedulerC.i \
@@ -3410,6 +3751,17 @@ endif
$(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminS_T.i \
$(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminS_T.cpp \
$(TAO_ROOT)/orbsvcs/orbsvcs/RtecEventChannelAdminS.i \
+ $(ACE_ROOT)/ace/Task.h \
+ $(ACE_ROOT)/ace/Task.i \
+ $(ACE_ROOT)/ace/Task_T.h \
+ $(ACE_ROOT)/ace/Task_T.i \
+ $(ACE_ROOT)/ace/Task_T.cpp \
+ $(ACE_ROOT)/ace/Module.h \
+ $(ACE_ROOT)/ace/Module.i \
+ $(ACE_ROOT)/ace/Module.cpp \
+ $(ACE_ROOT)/ace/Stream_Modules.h \
+ $(ACE_ROOT)/ace/Stream_Modules.i \
+ $(ACE_ROOT)/ace/Stream_Modules.cpp \
$(TAO_ROOT)/orbsvcs/orbsvcs/Time_Utilities.h \
$(TAO_ROOT)/orbsvcs/orbsvcs/Time_Utilities.i \
$(TAO_ROOT)/orbsvcs/orbsvcs/Event_Utilities.h \
diff --git a/TAO/orbsvcs/tests/Event/Basic/mt_disconnect.conf b/TAO/orbsvcs/tests/Event/Basic/mt.svc.conf
index a0fec53e3f8..a0fec53e3f8 100644
--- a/TAO/orbsvcs/tests/Event/Basic/mt_disconnect.conf
+++ b/TAO/orbsvcs/tests/Event/Basic/mt.svc.conf
diff --git a/TAO/orbsvcs/tests/Event/Basic/run_test.pl b/TAO/orbsvcs/tests/Event/Basic/run_test.pl
index 9aa1e088beb..11b67b021c6 100755
--- a/TAO/orbsvcs/tests/Event/Basic/run_test.pl
+++ b/TAO/orbsvcs/tests/Event/Basic/run_test.pl
@@ -91,8 +91,18 @@ if ($T->TimedWait (60) == -1) {
}
print STDERR "\n\nMT Disconnects test\n";
-$T = Process::Create ($prefix . "MT_Disconnect".$EXE_EXT);
-if ($T->TimedWait (60) == -1) {
+$T = Process::Create ($prefix . "MT_Disconnect".$EXE_EXT,
+ " -ORBSvcConf mt.svc.conf");
+if ($T->TimedWait (120) == -1) {
+ print STDERR "ERROR: Test timedout\n";
+ $status = 1;
+ $T->Kill (); $T->TimedWait (1);
+}
+
+print STDERR "\n\nAtomic Reconnection test\n";
+$T = Process::Create ($prefix . "Atomic_Reconnect".$EXE_EXT,
+ " -ORBSvcConf mt.svc.conf");
+if ($T->TimedWait (120) == -1) {
print STDERR "ERROR: Test timedout\n";
$status = 1;
$T->Kill (); $T->TimedWait (1);
diff --git a/TAO/orbsvcs/tests/Event/Event.dsw b/TAO/orbsvcs/tests/Event/Event.dsw
index 1ec9d065330..069a92e41bb 100644
--- a/TAO/orbsvcs/tests/Event/Event.dsw
+++ b/TAO/orbsvcs/tests/Event/Event.dsw
@@ -165,6 +165,21 @@ Package=<4>
###############################################################################
+Project: "Atomic_Reconnect"=.\Basic\Atomic_Reconnect.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name ECTest
+ End Project Dependency
+}}}
+
+###############################################################################
+
Global:
Package=<5>