summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TAO/ChangeLog8
-rw-r--r--TAO/orbsvcs/tests/Bug_3486_Regression/Bug_3486_Regression.mpc18
-rw-r--r--TAO/orbsvcs/tests/Bug_3486_Regression/DllORB.cpp231
-rw-r--r--TAO/orbsvcs/tests/Bug_3486_Regression/DllORB.h42
-rw-r--r--TAO/orbsvcs/tests/Bug_3486_Regression/Makefile.am97
-rw-r--r--TAO/orbsvcs/tests/Bug_3486_Regression/bug3486_export.h58
-rwxr-xr-xTAO/orbsvcs/tests/Bug_3486_Regression/run_test.pl36
-rw-r--r--TAO/orbsvcs/tests/Bug_3486_Regression/server.cpp134
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;
+}