diff options
-rw-r--r-- | TAO/ChangeLog | 8 | ||||
-rw-r--r-- | TAO/orbsvcs/tests/Bug_3486_Regression/Bug_3486_Regression.mpc | 18 | ||||
-rw-r--r-- | TAO/orbsvcs/tests/Bug_3486_Regression/DllORB.cpp | 231 | ||||
-rw-r--r-- | TAO/orbsvcs/tests/Bug_3486_Regression/DllORB.h | 42 | ||||
-rw-r--r-- | TAO/orbsvcs/tests/Bug_3486_Regression/Makefile.am | 97 | ||||
-rw-r--r-- | TAO/orbsvcs/tests/Bug_3486_Regression/bug3486_export.h | 58 | ||||
-rwxr-xr-x | TAO/orbsvcs/tests/Bug_3486_Regression/run_test.pl | 36 | ||||
-rw-r--r-- | TAO/orbsvcs/tests/Bug_3486_Regression/server.cpp | 134 |
8 files changed, 623 insertions, 1 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog index 0dd8805429e..359b4d9fb43 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -1,3 +1,8 @@ +Mon Nov 3 10:28:00 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl> + + * orbsvcs/tests/Bug_3486_Regression/*: + New file for bugzilla 3486 + Mon Nov 3 10:24:00 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl> * tao/Object_Ref_Table.cpp: @@ -17,7 +22,8 @@ Mon Nov 3 10:24:00 UTC 2008 Johnny Willemsen <jwillemsen@remedy.nl> * orbsvcs/orbsvcs/Naming/Naming_Server.cpp: * orbsvcs/orbsvcs/Naming/Naming_Server.h: Const/bool changes. Also unregister the NamingService from the - ORB rir table. + ORB rir table. This makes it possible to load and unload the + naming service multiple times as services, fixes bugzilla 3486 * orbsvcs/orbsvcs/Naming/Naming_Loader.cpp: Use the tchar argv array diff --git a/TAO/orbsvcs/tests/Bug_3486_Regression/Bug_3486_Regression.mpc b/TAO/orbsvcs/tests/Bug_3486_Regression/Bug_3486_Regression.mpc new file mode 100644 index 00000000000..e7134e3c6bf --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_3486_Regression/Bug_3486_Regression.mpc @@ -0,0 +1,18 @@ +// $Id$ + +project (*lib): taolib, portableserver, threads, avoids_corba_e_micro, avoids_corba_e_compact, avoids_minimum_corba { + sharedname = bug3486 + dynamicflags += BUG3486_BUILD_DLL + + Source_Files { + DllORB.cpp + } +} + +project (*Server): taoserver, naming_serv, threads, avoids_corba_e_micro, avoids_corba_e_compact, avoids_minimum_corba { + libs += bug3486 + after += *lib + Source_Files { + server.cpp + } +} diff --git a/TAO/orbsvcs/tests/Bug_3486_Regression/DllORB.cpp b/TAO/orbsvcs/tests/Bug_3486_Regression/DllORB.cpp new file mode 100644 index 00000000000..8a5b304e171 --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_3486_Regression/DllORB.cpp @@ -0,0 +1,231 @@ +// $Id$ +#include "DllORB.h" +#include "ace/Barrier.h" +#include "ace/Arg_Shifter.h" +#include "ace/Argv_Type_Converter.h" +#include "ace/OS_NS_unistd.h" +#include "tao/TAO_Singleton_Manager.h" + + +DllORB::DllORB () + : failPrePostInit_ (3), + mp_barrier_ (0), + mv_orb_ (), + mv_rootPOA_ () +{ +} + + +DllORB::~DllORB () +{ + delete mp_barrier_; +} + + +int +DllORB::init (int argc, ACE_TCHAR *argv[]) +{ + int threadCnt = 1; + + try + { + ACE_Arg_Shifter as (argc, argv); + const ACE_TCHAR *currentArg = 0; + while (as.is_anything_left ()) + { + if ((currentArg = as.get_the_parameter (ACE_TEXT ("-NumThreads")))) + { + int num = ACE_OS::atoi (currentArg); + if (num >= 1) + threadCnt = num; + as.consume_arg (); + } + else + as.ignore_arg (); + } + + if (failPrePostInit_ < 3) + { + ACE_DEBUG ((LM_INFO, + ACE_TEXT ("Pre-ORB initialization ...\n"))); + // ----------------------------------------------------------------- + // Pre-ORB initialization steps necessary for proper DLL ORB + // support. + // ----------------------------------------------------------------- + // Make sure TAO's singleton manager is initialized, and set to not + // register itself with the ACE_Object_Manager since it is under the + // control of the Service Configurator. If we register with the + // ACE_Object_Manager, then the ACE_Object_Manager will still hold + // (dangling) references to instances of objects created by this + // module and destroyed by this object when it is dynamically + // unloaded. + int register_with_object_manager = 0; + TAO_Singleton_Manager * p_tsm = TAO_Singleton_Manager::instance (); + int result = p_tsm->init (register_with_object_manager); + + if (result == -1) + { + if (failPrePostInit_ == 0) + { + ACE_DEBUG ((LM_ERROR, + ACE_TEXT ("Pre-ORB initialization failed.\n"))); + return -1; + } + else if (failPrePostInit_ < 2) + { + ACE_DEBUG ((LM_WARNING, + ACE_TEXT ("Pre-ORB initialization failed (ignored due to FailPrePostInit setting).\n"))); + } + else + { + ACE_DEBUG ((LM_INFO, + ACE_TEXT ("Pre-ORB initialization failed (ignored due to FailPrePostInit setting).\n"))); + } + } + else + { + ACE_DEBUG ((LM_INFO, + ACE_TEXT ("Pre-ORB initialization done.\n"))); + } + } + + // Initialize the ORB + ACE_Argv_Type_Converter argcon (argc, argv); + mv_orb_ = CORBA::ORB_init (argcon.get_argc (), argcon.get_TCHAR_argv ()); + if (CORBA::is_nil (mv_orb_.in ())) + { + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("nil ORB\n"))); + return -1; + } + + CORBA::Object_var v_poa = + mv_orb_->resolve_initial_references ("RootPOA"); + + mv_rootPOA_ = PortableServer::POA::_narrow (v_poa.in ()); + if (CORBA::is_nil (mv_rootPOA_.in ())) + { + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("nil RootPOA\n"))); + return -1; + } + + mv_poaManager_ = mv_rootPOA_->the_POAManager (); + if (CORBA::is_nil (mv_poaManager_.in ())) + { + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("nil POAManager\n"))); + return -1; + } + + mv_poaManager_->activate (); + } + catch (...) + { + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("ERROR: exception\n"))); + return -1; + } + + mp_barrier_ = new ACE_Thread_Barrier (threadCnt + 1); + + this->activate (THR_NEW_LWP|THR_JOINABLE|THR_INHERIT_SCHED, threadCnt); + mp_barrier_->wait (); + + return 0; +} + + +int +DllORB::fini () +{ + try + { + mv_poaManager_->deactivate (1, 1); + mv_poaManager_ = PortableServer::POAManager::_nil (); + + // attempt to protect against sporadic BAD_INV_ORDER exceptions + ACE_OS::sleep (ACE_Time_Value (0, 500)); + + mv_orb_->shutdown (1); + } + catch (...) + { + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("ERROR: exception\n"))); + return -1; + } + + // wait for our threads to finish + this->wait (); + + delete mp_barrier_; + mp_barrier_ = 0; + + try + { + mv_orb_->destroy (); + mv_orb_ = CORBA::ORB::_nil (); + } + catch (const CORBA::Exception& ex) + { + ex._tao_print_exception ("Exception caught:"); + return -1; + } + + if (failPrePostInit_ < 3) + { + // ----------------------------------------------------------------- + // Post-ORB finalization steps necessary for proper DLL ORB + // support. + // ----------------------------------------------------------------- + // Explicitly clean up singletons created by TAO before + // unloading this module. + TAO_Singleton_Manager * p_tsm = TAO_Singleton_Manager::instance (); + int result = p_tsm->fini (); + if (result == -1) + { + if (failPrePostInit_ == 0) + { + ACE_DEBUG ((LM_ERROR, + ACE_TEXT ("Post-ORB finalization failed.\n"))); + return -1; + } + else if (failPrePostInit_ < 2) + { + ACE_DEBUG ((LM_WARNING, + ACE_TEXT ("Post-ORB finalization failed (ignored due to FailPrePostInit setting).\n"))); + } + else + { + ACE_DEBUG ((LM_INFO, + ACE_TEXT ("Post-ORB finalization failed (ignored due to FailPrePostInit setting).\n"))); + } + } + else + { + ACE_DEBUG ((LM_INFO, + ACE_TEXT ("Post-ORB finalization done.\n"))); + } + } + + return 0; +} + + +int DllORB::svc () +{ + mp_barrier_->wait (); + + int result = 0; + + try + { + mv_orb_->run (); + } + catch (...) + { + ACE_DEBUG ((LM_ERROR, ACE_TEXT ("ERROR: exception\n"))); + result = 1; + } + + return result; +} + + +ACE_FACTORY_DEFINE (bug3486, DllORB) diff --git a/TAO/orbsvcs/tests/Bug_3486_Regression/DllORB.h b/TAO/orbsvcs/tests/Bug_3486_Regression/DllORB.h new file mode 100644 index 00000000000..e630ab370be --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_3486_Regression/DllORB.h @@ -0,0 +1,42 @@ +// $Id$ +#ifndef DLLORB_H +#define DLLORB_H + +#include "ace/Task.h" +#include "tao/ORB.h" +#include "tao/PortableServer/PortableServer.h" +#include "bug3486_export.h" + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL +class ACE_Thread_Barrier; +ACE_END_VERSIONED_NAMESPACE_DECL + +class bug3486_Export DllORB: public ACE_Task_Base +{ +public: + DllORB (); + virtual ~DllORB (); + + inline CORBA::ORB_ptr orb () const + { + return CORBA::ORB::_duplicate (mv_orb_.in ()); + } + + virtual int init (int argc, ACE_TCHAR *argv[]); + + virtual int fini (); + +protected: + virtual int svc (); + +private: + unsigned int failPrePostInit_; + ACE_Thread_Barrier* mp_barrier_; + CORBA::ORB_var mv_orb_; + PortableServer::POA_var mv_rootPOA_; + PortableServer::POAManager_var mv_poaManager_; +}; + +ACE_FACTORY_DECLARE (bug3486, DllORB) + +#endif /* DLLORB_H */ diff --git a/TAO/orbsvcs/tests/Bug_3486_Regression/Makefile.am b/TAO/orbsvcs/tests/Bug_3486_Regression/Makefile.am new file mode 100644 index 00000000000..7ee7f0b5e7a --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_3486_Regression/Makefile.am @@ -0,0 +1,97 @@ +## Process this file with automake to create Makefile.in +## +## $Id$ +## +## This file was generated by MPC. Any changes made directly to +## this file will be lost the next time it is generated. +## +## MPC Command: +## ../bin/mwc.pl -type automake -noreldefs TAO.mwc + +ACE_BUILDDIR = $(top_builddir)/.. +ACE_ROOT = $(top_srcdir)/.. +TAO_BUILDDIR = $(top_builddir) +TAO_ROOT = $(top_srcdir) + + +## Makefile.Bug_2926_Regression_Lib.am + +if BUILD_EXCEPTIONS +if BUILD_THREADS + +noinst_LTLIBRARIES = libbug2926.la + +libbug2926_la_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(TAO_ROOT) \ + -I$(TAO_BUILDDIR) \ + -DBUG2926_BUILD_DLL + +libbug2926_la_SOURCES = \ + DllORB.cpp + +noinst_HEADERS = \ + DllORB.h + +endif BUILD_THREADS +endif BUILD_EXCEPTIONS + +## Makefile.Bug_2926_Regression_Server.am + +if BUILD_CORBA_MESSAGING +if BUILD_EXCEPTIONS +if BUILD_THREADS + +noinst_PROGRAMS = server + +server_CPPFLAGS = \ + -I$(ACE_ROOT) \ + -I$(ACE_BUILDDIR) \ + -I$(TAO_ROOT) \ + -I$(TAO_BUILDDIR) \ + -I$(TAO_ROOT)/orbsvcs \ + -I$(TAO_BUILDDIR)/orbsvcs \ + -DTAO_HAS_TYPED_EVENT_CHANNEL + +server_SOURCES = \ + server.cpp \ + DllORB.h \ + bug2926_export.h + +server_LDADD = \ + libbug2926.la \ + $(TAO_BUILDDIR)/orbsvcs/orbsvcs/libTAO_CosNotification_Serv.la \ + $(TAO_BUILDDIR)/orbsvcs/orbsvcs/libTAO_CosNotification_Skel.la \ + $(TAO_BUILDDIR)/tao/libTAO_DynamicAny.la \ + $(ACE_BUILDDIR)/ace/ETCL/libACE_ETCL_Parser.la \ + $(TAO_BUILDDIR)/tao/ETCL/libTAO_ETCL.la \ + $(ACE_BUILDDIR)/ace/ETCL/libACE_ETCL.la \ + $(TAO_BUILDDIR)/orbsvcs/orbsvcs/libTAO_CosEvent_Serv.la \ + $(TAO_BUILDDIR)/orbsvcs/orbsvcs/libTAO_Svc_Utils.la \ + $(TAO_BUILDDIR)/orbsvcs/orbsvcs/libTAO_CosNaming.la \ + $(TAO_BUILDDIR)/tao/libTAO_IFR_Client.la \ + $(TAO_BUILDDIR)/tao/libTAO_DynamicInterface.la \ + $(TAO_BUILDDIR)/tao/libTAO_Messaging.la \ + $(TAO_BUILDDIR)/tao/libTAO_PI.la \ + $(TAO_BUILDDIR)/tao/libTAO_CodecFactory.la \ + $(TAO_BUILDDIR)/tao/libTAO_Valuetype.la \ + $(TAO_BUILDDIR)/orbsvcs/orbsvcs/libTAO_CosEvent_Skel.la \ + $(TAO_BUILDDIR)/orbsvcs/orbsvcs/libTAO_CosNotification.la \ + $(TAO_BUILDDIR)/orbsvcs/orbsvcs/libTAO_CosEvent.la \ + $(TAO_BUILDDIR)/tao/libTAO_PortableServer.la \ + $(TAO_BUILDDIR)/tao/libTAO_AnyTypeCode.la \ + $(TAO_BUILDDIR)/tao/libTAO.la \ + $(ACE_BUILDDIR)/ace/libACE.la + +endif BUILD_THREADS +endif BUILD_EXCEPTIONS +endif BUILD_CORBA_MESSAGING + +## Clean up template repositories, etc. +clean-local: + -rm -f *~ *.bak *.rpo *.sym lib*.*_pure_* core core.* + -rm -f gcctemp.c gcctemp so_locations *.ics + -rm -rf cxx_repository ptrepository ti_files + -rm -rf templateregistry ir.out + -rm -rf ptrepository SunWS_cache Templates.DB diff --git a/TAO/orbsvcs/tests/Bug_3486_Regression/bug3486_export.h b/TAO/orbsvcs/tests/Bug_3486_Regression/bug3486_export.h new file mode 100644 index 00000000000..2b3b25ed078 --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_3486_Regression/bug3486_export.h @@ -0,0 +1,58 @@ + +// -*- C++ -*- +// $Id$ +// Definition for Win32 Export directives. +// This file is generated automatically by generate_export_file.pl bug3486 +// ------------------------------ +#ifndef BUG3486_EXPORT_H +#define BUG3486_EXPORT_H + +#include "ace/config-all.h" + +#if defined (ACE_AS_STATIC_LIBS) && !defined (BUG3486_HAS_DLL) +# define BUG3486_HAS_DLL 0 +#endif /* ACE_AS_STATIC_LIBS && BUG3486_HAS_DLL */ + +#if !defined (BUG3486_HAS_DLL) +# define BUG3486_HAS_DLL 1 +#endif /* ! BUG3486_HAS_DLL */ + +#if defined (BUG3486_HAS_DLL) && (BUG3486_HAS_DLL == 1) +# if defined (BUG3486_BUILD_DLL) +# define bug3486_Export ACE_Proper_Export_Flag +# define BUG3486_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) +# define BUG3486_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# else /* BUG3486_BUILD_DLL */ +# define bug3486_Export ACE_Proper_Import_Flag +# define BUG3486_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) +# define BUG3486_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +# endif /* BUG3486_BUILD_DLL */ +#else /* BUG3486_HAS_DLL == 1 */ +# define bug3486_Export +# define BUG3486_SINGLETON_DECLARATION(T) +# define BUG3486_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) +#endif /* BUG3486_HAS_DLL == 1 */ + +// Set BUG3486_NTRACE = 0 to turn on library specific tracing even if +// tracing is turned off for ACE. +#if !defined (BUG3486_NTRACE) +# if (ACE_NTRACE == 1) +# define BUG3486_NTRACE 1 +# else /* (ACE_NTRACE == 1) */ +# define BUG3486_NTRACE 0 +# endif /* (ACE_NTRACE == 1) */ +#endif /* !BUG3486_NTRACE */ + +#if (BUG3486_NTRACE == 1) +# define BUG3486_TRACE(X) +#else /* (BUG3486_NTRACE == 1) */ +# if !defined (ACE_HAS_TRACE) +# define ACE_HAS_TRACE +# endif /* ACE_HAS_TRACE */ +# define BUG3486_TRACE(X) ACE_TRACE_IMPL(X) +# include "ace/Trace.h" +#endif /* (BUG3486_NTRACE == 1) */ + +#endif /* BUG3486_EXPORT_H */ + +// End of auto generated file. diff --git a/TAO/orbsvcs/tests/Bug_3486_Regression/run_test.pl b/TAO/orbsvcs/tests/Bug_3486_Regression/run_test.pl new file mode 100755 index 00000000000..0e7080fef23 --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_3486_Regression/run_test.pl @@ -0,0 +1,36 @@ +eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' + & eval 'exec perl -S $0 $argv:q' + if 0; + +# $Id$ +# -*- perl -*- + +use lib "$ENV{ACE_ROOT}/bin"; +use PerlACE::Run_Test; + +$status = 0; +$file = PerlACE::LocalFile ("test.ior"); + +unlink $file; + +if (PerlACE::is_vxworks_test()) { + $SV = new PerlACE::ProcessVX ("server", ""); +} +else { + $SV = new PerlACE::Process ("server", ""); +} + +print STDERR "\n\n==== Running bug 2926 regression test\n"; + +$SV->Spawn (); + +$collocated = $SV->WaitKill (15); + +if ($collocated != 0) { + print STDERR "ERROR: Bug_2926_Regression returned $collocated\n"; + $status = 1; +} + +unlink $file; + +exit $status; diff --git a/TAO/orbsvcs/tests/Bug_3486_Regression/server.cpp b/TAO/orbsvcs/tests/Bug_3486_Regression/server.cpp new file mode 100644 index 00000000000..1339b964c0c --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_3486_Regression/server.cpp @@ -0,0 +1,134 @@ +// $Id$ + +#include "ace/Service_Config.h" +#include "orbsvcs/Naming/Naming_Loader.h" + +#include "DllORB.h" + +char const * const scpc_orbId = "testDllOrb"; + +ACE_TCHAR const * const scpc_loadOrb = ACE_DYNAMIC_SERVICE_DIRECTIVE( + "testDllOrb", + "bug3486", + "_make_DllORB", + "testDllOrb -ORBDebugLevel 0 -ORBId testDllOrb -ORBDottedDecimalAddresses 1" +); + +ACE_TCHAR const * const scpc_unloadOrb = ACE_REMOVE_SERVICE_DIRECTIVE("testDllOrb"); + +ACE_TCHAR const * const scpc_loadNamingService = ACE_DYNAMIC_SERVICE_DIRECTIVE( + "testNamingService", + "TAO_CosNaming_Serv", + "_make_TAO_Naming_Loader", + "" +); + +ACE_TCHAR const * const scpc_unloadNamingService = ACE_REMOVE_SERVICE_DIRECTIVE("testNamingService"); + +void loadunloadcycle() +{ + int result = 0; + + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) loadunloadcycle - loading\n") + )); + + result = ACE_Service_Config::process_directive(scpc_loadOrb); + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) loadunloadcycle - loading ORB done\n") + )); + + DllORB * p_orb = + ACE_Dynamic_Service<DllORB>::instance("testDllOrb"); + + CORBA::ORB_var v_orb; + v_orb = p_orb->orb(); + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) loadunloadcycle - v_orb OK\n") + )); + + CORBA::Object_var v_poa = + v_orb->resolve_initial_references("RootPOA"); + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) loadunloadcycle - v_poa OK\n") + )); + + PortableServer::POA_var v_rootPOA = + PortableServer::POA::_narrow(v_poa.in ()); + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) loadunloadcycle - v_rootPOA OK\n") + )); + + result = ACE_Service_Config::process_directive(scpc_loadNamingService); + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) loadunloadcycle - loading NamingService done\n") + )); + + TAO_Naming_Loader * p_NamingService = + ACE_Dynamic_Service<TAO_Naming_Loader>::instance("testNamingService"); + + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) loadunloadcycle - unloading\n") + )); + + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) loadunloadcycle - unloading NamingService ...\n") + )); + result = ACE_Service_Config::process_directive(scpc_unloadNamingService); + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) loadunloadcycle - unloading NamingService done\n") + )); + + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) loadunloadcycle - unloading ORB ...\n") + )); + result = ACE_Service_Config::process_directive(scpc_unloadOrb); + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) loadunloadcycle - unloading ORB done\n") + )); +} +int ACE_TMAIN (int , ACE_TCHAR **) +{ + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) main - entered\n") + )); + + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) main - cycle 1 ...\n") + )); + loadunloadcycle(); + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) main - cycle 1 done\n") + )); + + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) main - cycle 2 ...\n") + )); + loadunloadcycle(); + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) main - cycle 2 done\n") + )); + + ACE_DEBUG(( + LM_DEBUG, + ACE_TEXT ("(%P|%t) main - leaving\n") + )); + + return 0; +} |