summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbala <balanatarajan@users.noreply.github.com>2002-07-13 14:11:07 +0000
committerbala <balanatarajan@users.noreply.github.com>2002-07-13 14:11:07 +0000
commit37c2eb4c5df1de1df6a917827bee93b2b878c8bb (patch)
tree9b31c6f7e8336bbdce3b410676fd1b6676b546ee
parent62c90c681f8383a9676251ddc917058bc9292bca (diff)
downloadATCD-37c2eb4c5df1de1df6a917827bee93b2b878c8bb.tar.gz
ChangeLogTag:Sat Jul 13 09:26:53 2002 Balachandran Natarajan <bala@cs.wustl.edu>
-rw-r--r--TAO/ChangeLog13
-rw-r--r--TAO/tests/Stack_Recursion/Client_Task.cpp75
-rw-r--r--TAO/tests/Stack_Recursion/Client_Task.h47
-rw-r--r--TAO/tests/Stack_Recursion/README23
-rw-r--r--TAO/tests/Stack_Recursion/Sender.cpp56
-rw-r--r--TAO/tests/Stack_Recursion/Sender.h53
-rw-r--r--TAO/tests/Stack_Recursion/Server_Task.cpp37
-rw-r--r--TAO/tests/Stack_Recursion/Server_Task.h33
-rw-r--r--TAO/tests/Stack_Recursion/Stack_Recursion.dsw40
-rw-r--r--TAO/tests/Stack_Recursion/Test.idl17
-rw-r--r--TAO/tests/Stack_Recursion/client.cpp96
-rw-r--r--TAO/tests/Stack_Recursion/client.dsp208
-rwxr-xr-xTAO/tests/Stack_Recursion/run_test.pl53
-rw-r--r--TAO/tests/Stack_Recursion/server.cpp123
14 files changed, 874 insertions, 0 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index d8febce2005..0ffceda70d3 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,16 @@
+Sat Jul 13 09:26:53 2002 Balachandran Natarajan <bala@cs.wustl.edu>
+
+ * tests/Stack_Recursion/client.cpp:
+ * tests/Stack_Recursion/Client_Task.h:
+ * tests/Stack_Recursion/Client_Task.cpp (svc):
+ * tests/Stack_Recursion/Sender.cpp:
+ * tests/Stack_Recursion/Sender.h:
+ * tests/Stack_Recursion/server.cpp:
+ * tests/Stack_Recursion/Server_Task.h:
+ * tests/Stack_Recursion/Server_Task.cpp:
+ * tests/Stack_Recursion/Test.idl:
+ * tests/Stack_Recursion/run_test.pl:
+
Fri Jul 12 13:52:12 2002 Johnny Willemsen <jwillemsen@remedy.nl>
* examples/Makefile.bor:
diff --git a/TAO/tests/Stack_Recursion/Client_Task.cpp b/TAO/tests/Stack_Recursion/Client_Task.cpp
new file mode 100644
index 00000000000..2d09cd42925
--- /dev/null
+++ b/TAO/tests/Stack_Recursion/Client_Task.cpp
@@ -0,0 +1,75 @@
+//
+// $Id$
+//
+
+#include "Client_Task.h"
+
+ACE_RCSID(Stack_Recursion,
+ Client_Task,
+ "$Id$")
+
+Client_Task::Client_Task (Test::Sender_ptr sender,
+ CORBA::Long event_count,
+ CORBA::ULong event_size,
+ ACE_Thread_Manager *thr_mgr)
+ : ACE_Task_Base (thr_mgr)
+ , sender_ (Test::Sender::_duplicate (sender))
+ , event_count_ (event_count)
+ , event_size_ (event_size)
+{
+}
+
+int
+Client_Task::svc (void)
+{
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) Starting client task\n"));
+
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ this->validate_connections (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ for (int i = 0; i != this->event_count_; ++i)
+ {
+ if (i%100 == 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "(%P|%T) In iteration [%d] ....\n",
+ i))
+ Test::Payload_var pl = new Test::Payload;
+ Test::Payload_out payload (pl.out ());
+ this->sender_->get_data (this->event_size_,
+ payload
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ }
+ ACE_CATCHANY
+ {
+ return -1;
+ }
+ ACE_ENDTRY;
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) Client task finished\n"));
+ return 0;
+}
+
+
+void
+Client_Task::validate_connections (ACE_ENV_SINGLE_ARG_PARAMETER)
+{
+ for (int i = 0 ; i != 100; i++)
+ {
+ ACE_TRY
+ {
+ Test::Payload_var pl =
+ new Test::Payload;
+ Test::Payload_out k (pl.out ());
+ this->sender_->get_data (1,
+ k
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ }
+ ACE_CATCHANY {} ACE_ENDTRY;
+ }
+}
diff --git a/TAO/tests/Stack_Recursion/Client_Task.h b/TAO/tests/Stack_Recursion/Client_Task.h
new file mode 100644
index 00000000000..85978ff0d2a
--- /dev/null
+++ b/TAO/tests/Stack_Recursion/Client_Task.h
@@ -0,0 +1,47 @@
+//
+// $Id$
+//
+
+#ifndef STACK_RECURSION_CLIENT_TASK_H
+#define STACK_RECURSION_CLIENT_TASK_H
+#include "ace/pre.h"
+#include "TestC.h"
+
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/Task.h"
+
+/// Implement a Task to run the experiments using multiple threads.
+class Client_Task : public ACE_Task_Base
+{
+public:
+ /// Constructor
+ Client_Task (Test::Sender_ptr receiver,
+ CORBA::Long event_count,
+ CORBA::ULong event_size,
+ ACE_Thread_Manager *thr_mgr);
+
+ /// Thread entry point
+ int svc (void);
+
+private:
+
+ /// Simple pings to prune up the connections
+ void validate_connections (ACE_ENV_SINGLE_ARG_PARAMETER);
+
+private:
+ /// Reference to the test interface
+ Test::Sender_var sender_;
+
+ /// Total number of events
+ CORBA::Long event_count_;
+
+ /// Size of each message
+ CORBA::ULong event_size_;
+};
+
+#include "ace/post.h"
+#endif /* STACK_RECURSION_CLIENT_TASK_H */
diff --git a/TAO/tests/Stack_Recursion/README b/TAO/tests/Stack_Recursion/README
new file mode 100644
index 00000000000..cc202fc7c40
--- /dev/null
+++ b/TAO/tests/Stack_Recursion/README
@@ -0,0 +1,23 @@
+/**
+
+@page Stack_Recursion Test README File
+
+ A stress test for the stack recursion outlined in the bugzilla
+under id 1125. Here is the link for the bug
+
+http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1125
+
+This test is designed to show the bug. The test has a server running 4
+threads and clients running 16 threads requesting around 30 MB of
+data.
+
+@@NOTE: Once the bug is fixed we may have to change the timings in the
+test so that the test can run to completion.
+
+ To run the test use the run_test.pl script:
+
+$ ./run_test.pl
+
+ the script returns 0 if the test was successful.
+
+*/ \ No newline at end of file
diff --git a/TAO/tests/Stack_Recursion/Sender.cpp b/TAO/tests/Stack_Recursion/Sender.cpp
new file mode 100644
index 00000000000..b3cb059bd93
--- /dev/null
+++ b/TAO/tests/Stack_Recursion/Sender.cpp
@@ -0,0 +1,56 @@
+//
+// $Id$
+//
+#include "Sender.h"
+
+ACE_RCSID(Stack_Recursion,
+ Sender,
+ "$Id$")
+
+Sender::Sender (void)
+ : message_count_ (0)
+ , byte_count_ (0)
+{
+}
+
+void
+Sender::dump_results ()
+{
+ ACE_GUARD (ACE_SYNCH_MUTEX, ace_mon, this->mutex_);
+ ACE_DEBUG ((LM_DEBUG,
+ "Total messages = %d\n"
+ "Total bytes = %d\n",
+ this->message_count_,
+ this->byte_count_));
+}
+
+CORBA::Boolean
+Sender::get_data (CORBA::ULong size,
+ Test::Payload_out payload
+ ACE_ENV_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ ACE_GUARD_RETURN (ACE_SYNCH_MUTEX,
+ ace_mon,
+ this->mutex_,
+ 0);
+
+ this->message_count_++;
+ payload =
+ new Test::Payload (size);
+ payload->length (size);
+ this->byte_count_ += size;
+
+ return 1;
+}
+
+CORBA::Long
+Sender::get_event_count (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ ACE_GUARD_RETURN (ACE_SYNCH_MUTEX,
+ ace_mon,
+ this->mutex_,
+ 0);
+ return this->message_count_;
+}
diff --git a/TAO/tests/Stack_Recursion/Sender.h b/TAO/tests/Stack_Recursion/Sender.h
new file mode 100644
index 00000000000..4255d956152
--- /dev/null
+++ b/TAO/tests/Stack_Recursion/Sender.h
@@ -0,0 +1,53 @@
+//
+// $Id$
+//
+
+#ifndef STACK_RECURSION_SENDER_H
+#define STACK_RECURSION_SENDER_H
+#include "ace/pre.h"
+
+#include "TestS.h"
+
+#if defined (_MSC_VER)
+# if (_MSC_VER >= 1200)
+# pragma warning(push)
+# endif /* _MSC_VER >= 1200 */
+# pragma warning (disable:4250)
+#endif /* _MSC_VER */
+
+/// Implement the Test::Receiver interface
+/**
+ * Simply print count how many bytes were received.
+ */
+class Sender
+ : public virtual POA_Test::Sender
+ , public virtual PortableServer::RefCountServantBase
+{
+public:
+ /// Constructor
+ Sender (void);
+
+ /// Print out the results
+ void dump_results (void);
+
+ // = The skeleton methods
+ virtual CORBA::Boolean get_data (CORBA::ULong size,
+ Test::Payload_out payload
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ virtual CORBA::Long get_event_count (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+private:
+ ACE_SYNCH_MUTEX mutex_;
+ CORBA::ULong message_count_;
+ CORBA::ULong byte_count_;
+};
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma warning(pop)
+#endif /* _MSC_VER */
+
+#include "ace/post.h"
+#endif /* MUXING_RECEIVER_H */
diff --git a/TAO/tests/Stack_Recursion/Server_Task.cpp b/TAO/tests/Stack_Recursion/Server_Task.cpp
new file mode 100644
index 00000000000..d331cd5377d
--- /dev/null
+++ b/TAO/tests/Stack_Recursion/Server_Task.cpp
@@ -0,0 +1,37 @@
+//
+// $Id$
+//
+
+#include "Server_Task.h"
+
+ACE_RCSID(Stack_Recusrion,
+ Server_Task,
+ "$Id$")
+
+Server_Task::Server_Task (CORBA::ORB_ptr orb,
+ ACE_Thread_Manager *thr_mgr)
+ : ACE_Task_Base (thr_mgr)
+ , orb_ (CORBA::ORB::_duplicate (orb))
+{
+}
+
+int
+Server_Task::svc (void)
+{
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) Starting server task\n"));
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ // run the test for at most 120 seconds...
+ ACE_Time_Value tv (120, 0);
+ this->orb_->run (tv ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ return -1;
+ }
+ ACE_ENDTRY;
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) Server task finished\n"));
+ return 0;
+}
diff --git a/TAO/tests/Stack_Recursion/Server_Task.h b/TAO/tests/Stack_Recursion/Server_Task.h
new file mode 100644
index 00000000000..9b76b615967
--- /dev/null
+++ b/TAO/tests/Stack_Recursion/Server_Task.h
@@ -0,0 +1,33 @@
+//
+// $Id$
+//
+
+#ifndef STACK_RECURSION_SERVER_TASK_H
+#define STACK_RECUSRION_SERVER_TASK_H
+#include "ace/pre.h"
+#include "tao/corba.h"
+
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+#include "ace/Task.h"
+
+/// Implement a Task to run the experiments using multiple threads.
+class Server_Task : public ACE_Task_Base
+{
+public:
+ /// Constructor
+ Server_Task (CORBA::ORB_ptr orb,
+ ACE_Thread_Manager *thr_mgr);
+
+ /// Thread entry point
+ int svc (void);
+
+private:
+ /// Reference to the ORB
+ CORBA::ORB_var orb_;
+};
+
+#include "ace/post.h"
+#endif /* STACK_RECUSRION_SERVER_TASK_H */
diff --git a/TAO/tests/Stack_Recursion/Stack_Recursion.dsw b/TAO/tests/Stack_Recursion/Stack_Recursion.dsw
new file mode 100644
index 00000000000..bf8db5f91c4
--- /dev/null
+++ b/TAO/tests/Stack_Recursion/Stack_Recursion.dsw
@@ -0,0 +1,40 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Stack Recursion Client"=.\client.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "Stack Recursion Server"=.\server.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
diff --git a/TAO/tests/Stack_Recursion/Test.idl b/TAO/tests/Stack_Recursion/Test.idl
new file mode 100644
index 00000000000..97af4cb3706
--- /dev/null
+++ b/TAO/tests/Stack_Recursion/Test.idl
@@ -0,0 +1,17 @@
+//
+// $Id$
+//
+
+module Test
+{
+ typedef sequence<octet> Payload;
+
+ interface Sender {
+ /// Receive a big payload
+ boolean get_data (in unsigned long size,
+ out Payload the_payload);
+
+ /// Return the number of messages received so far
+ long get_event_count ();
+ };
+};
diff --git a/TAO/tests/Stack_Recursion/client.cpp b/TAO/tests/Stack_Recursion/client.cpp
new file mode 100644
index 00000000000..2670935dd6e
--- /dev/null
+++ b/TAO/tests/Stack_Recursion/client.cpp
@@ -0,0 +1,96 @@
+// $Id$
+
+#include "Client_Task.h"
+#include "ace/Get_Opt.h"
+
+ACE_RCSID(Stack_Recursion,
+ client,
+ "$Id$")
+
+const char *ior = "file://test.ior";
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "k:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'k':
+ ior = get_opts.opt_arg ();
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-k <ior>"
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ ACE_TRY_NEW_ENV
+ {
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (parse_args (argc, argv) != 0)
+ return 1;
+
+ CORBA::Object_var tmp =
+ orb->string_to_object(ior ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Test::Sender_var sender =
+ Test::Sender::_narrow(tmp.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (sender.in ()))
+ {
+ ACE_ERROR_RETURN ((LM_DEBUG,
+ "Nil coordinator reference <%s>\n",
+ ior),
+ 1);
+ }
+
+
+ Client_Task client_task (sender.in (),
+ 1000,
+ 3931260,
+ ACE_Thread_Manager::instance ());
+
+ if (client_task.activate (THR_NEW_LWP | THR_JOINABLE, 16, 1) == -1)
+ {
+ ACE_ERROR ((LM_ERROR, "Error activating client task\n"));
+ }
+ ACE_Thread_Manager::instance ()->wait ();
+
+ CORBA::Long count =
+ sender->get_event_count (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_DEBUG ((LM_DEBUG, "(%P) - Receiver got %d messages\n",
+ count));
+
+ orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception caught:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
diff --git a/TAO/tests/Stack_Recursion/client.dsp b/TAO/tests/Stack_Recursion/client.dsp
new file mode 100644
index 00000000000..21d92b80840
--- /dev/null
+++ b/TAO/tests/Stack_Recursion/client.dsp
@@ -0,0 +1,208 @@
+# Microsoft Developer Studio Project File - Name="Stack Recursion Client" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Stack Recursion Client - 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 "client.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 "client.mak" CFG="Stack Recursion Client - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Stack Recursion Client - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Stack Recursion Client - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Stack Recursion Client - 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 "../../../" /I "../../" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
+# SUBTRACT CPP /YX
+# 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 tao.lib ace.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\ace" /libpath:"..\..\tao"
+
+!ELSEIF "$(CFG)" == "Stack Recursion Client - 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 "../../../" /I "../../" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
+# SUBTRACT CPP /YX
+# 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 taod.lib aced.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\ace" /libpath:"..\..\tao"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Stack Recursion Client - Win32 Release"
+# Name "Stack Recursion Client - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter ".cpp"
+# Begin Source File
+
+SOURCE=.\client.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Client_Task.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TestC.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\Client_Task.h
+# End Source File
+# End Group
+# Begin Group "IDL Files"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\Test.idl
+
+!IF "$(CFG)" == "Stack Recursion Client - Win32 Release"
+
+# PROP Ignore_Default_Tool 1
+USERDEP__TEST_="..\..\..\bin\Release\tao_idl.exe"
+# Begin Custom Build - Invoking TAO_IDL Compiler
+InputPath=.\Test.idl
+InputName=Test
+
+BuildCmds= \
+ ..\..\..\bin\Release\tao_idl -Ge 1 $(InputName).idl
+
+"$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "Stack Recursion Client - Win32 Debug"
+
+USERDEP__TEST_="..\..\..\bin\tao_idl.exe"
+# Begin Custom Build - Invoking TAO_IDL Compiler
+InputPath=.\Test.idl
+InputName=Test
+
+BuildCmds= \
+ ..\..\..\bin\tao_idl -Ge 1 $(InputName).idl
+
+"$(InputName)C.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)C.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.i" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"$(InputName)S_T.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# Begin Group "Inline Files"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\TestC.i
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/TAO/tests/Stack_Recursion/run_test.pl b/TAO/tests/Stack_Recursion/run_test.pl
new file mode 100755
index 00000000000..a96127632e8
--- /dev/null
+++ b/TAO/tests/Stack_Recursion/run_test.pl
@@ -0,0 +1,53 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+use lib '../../../bin';
+use PerlACE::Run_Test;
+
+$iorfile = PerlACE::LocalFile ("server.ior");
+unlink $iorfile;
+$status = 0;
+
+$SV = new PerlACE::Process ("server", "-o $iorfile");
+$CL1 = new PerlACE::Process ("client", " -k file://$iorfile");
+$CL2 = new PerlACE::Process ("client", " -k file://$iorfile");
+
+$SV->Spawn ();
+
+if (PerlACE::waitforfile_timed ($iorfile, 15) == -1) {
+ print STDERR "ERROR: cannot find file <$iorfile>\n";
+ $SV->Kill (); $SV->TimedWait (1);
+ exit 1;
+}
+
+$CL1->Spawn (60);
+$CL2->Spawn (60);
+
+$client1 = $CL1->WaitKill (60);
+
+if ($client1 != 0) {
+ print STDERR "ERROR: client 1 returned $client1\n";
+ $status = 1;
+}
+
+$client2 = $CL2->WaitKill (60);
+
+if ($client2 != 0) {
+ print STDERR "ERROR: client 2 returned $client2\n";
+ $status = 1;
+}
+
+$server = $SV->TerminateWaitKill (5);
+
+if ($server != 0) {
+ print STDERR "ERROR: server returned $server\n";
+ $status = 1;
+}
+
+unlink $iorfile;
+
+exit $status;
diff --git a/TAO/tests/Stack_Recursion/server.cpp b/TAO/tests/Stack_Recursion/server.cpp
new file mode 100644
index 00000000000..0b7d02dd3da
--- /dev/null
+++ b/TAO/tests/Stack_Recursion/server.cpp
@@ -0,0 +1,123 @@
+// $Id$
+
+#include "Sender.h"
+#include "Server_Task.h"
+#include "ace/Get_Opt.h"
+
+ACE_RCSID(Stack_Recursion,
+ server,
+ "$Id$")
+
+const char *ior_output_file = "test.ior";
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "o:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'o':
+ ior_output_file = get_opts.opt_arg ();
+ break;
+ case '?':
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s "
+ "-o <iorfile>"
+ "\n",
+ argv [0]),
+ -1);
+ }
+ // Indicates sucessful parsing of the command line
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ ACE_TRY_NEW_ENV
+ {
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, argv, "" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var poa_object =
+ orb->resolve_initial_references("RootPOA" ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (poa_object.in ()))
+ ACE_ERROR_RETURN ((LM_ERROR,
+ " (%P|%t) Unable to initialize the POA.\n"),
+ 1);
+
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (poa_object.in () ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (parse_args (argc, argv) != 0)
+ return 1;
+
+ Sender *sender_impl;
+ ACE_NEW_RETURN (sender_impl,
+ Sender,
+ 1);
+ PortableServer::ServantBase_var receiver_owner_transfer(sender_impl);
+
+ Test::Sender_var sender =
+ sender_impl->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CORBA::String_var ior =
+ orb->object_to_string (sender.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // If the ior_output_file exists, output the ior to it
+ FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
+ if (output_file == 0)
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "Cannot open output file for writing IOR: %s",
+ ior_output_file),
+ 1);
+ ACE_OS::fprintf (output_file, "%s", ior.in ());
+ ACE_OS::fclose (output_file);
+
+ poa_manager->activate (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ Server_Task server_task (orb.in (),
+ ACE_Thread_Manager::instance ());
+
+ if (server_task.activate (THR_NEW_LWP | THR_JOINABLE, 4, 1) == -1)
+ {
+ ACE_ERROR ((LM_ERROR, "Error activating server task\n"));
+ }
+ ACE_Thread_Manager::instance ()->wait ();
+
+ ACE_DEBUG ((LM_DEBUG, "Now terminating test\n"));
+
+ root_poa->destroy (1,
+ 1
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception caught:");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}