summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/ImplRepo/Bug_4152_Regression/server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/tests/ImplRepo/Bug_4152_Regression/server.cpp')
-rw-r--r--TAO/orbsvcs/tests/ImplRepo/Bug_4152_Regression/server.cpp26
1 files changed, 17 insertions, 9 deletions
diff --git a/TAO/orbsvcs/tests/ImplRepo/Bug_4152_Regression/server.cpp b/TAO/orbsvcs/tests/ImplRepo/Bug_4152_Regression/server.cpp
index dd010b3a7cd..bb9d613f201 100644
--- a/TAO/orbsvcs/tests/ImplRepo/Bug_4152_Regression/server.cpp
+++ b/TAO/orbsvcs/tests/ImplRepo/Bug_4152_Regression/server.cpp
@@ -15,7 +15,7 @@
class ORB_Runner : public ACE_Task_Base
{
public:
- ORB_Runner (CORBA::ORB_var orb) : orb_(orb) {}
+ ORB_Runner (CORBA::ORB_ptr orb) : orb_(CORBA::ORB::_duplicate(orb)) {}
int svc (void)
{
this->orb_->run ();
@@ -26,7 +26,6 @@ private:
CORBA::ORB_var orb_;
};
-
PortableServer::POA_var root_poa;
PortableServer::POA_var poa_a;
@@ -62,14 +61,15 @@ int
ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
- ORB_Runner *runner = new ORB_Runner (orb);
+ ORB_Runner *runner = new ORB_Runner (orb.in ());
int poa_delay = 10;
+ int shutdown_delay = 0;
ACE_DEBUG ((LM_DEBUG, "(%P|%t) Start server main\n"));
try
{
- ACE_Get_Opt get_opts (argc, argv, ACE_TEXT ("p:?"));
+ ACE_Get_Opt get_opts (argc, argv, ACE_TEXT ("p:s:?"));
int c;
while ((c = get_opts ()) != -1)
@@ -78,11 +78,14 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
case 'p':
poa_delay = ACE_OS::atoi (get_opts.opt_arg ());
break;
+ case 's':
+ shutdown_delay = ACE_OS::atoi (get_opts.opt_arg ());
+ break;
case '?':
ACE_DEBUG ((LM_DEBUG,
"usage: %s "
"-d <seconds to delay before initializing POA> "
- "-n Number of the server\n",
+ "-s <seconds to delay before exiting main after the ORB destroy>\n",
argv[0]));
return 1;
break;
@@ -97,7 +100,7 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
ACE_CString base = ACE_CString ("TestObject");
createPOAs (base);
- PortableServer::Servant_var<Test_i> test_servant = new Test_i;
+ PortableServer::Servant_var<Test_i> test_servant = new Test_i (orb.in ());
PortableServer::ObjectId_var object_id =
PortableServer::string_to_ObjectId (base.c_str());
@@ -107,7 +110,7 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
Test_var tva = Test::_narrow (obj.in());
- ACE_DEBUG ((LM_DEBUG, "(%P|%t) Started Server pid = %d poa delay %d\n", ACE_OS::getpid (), poa_delay));
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) Started Server pid <%d> poa delay <%d> shutdown delay <%d>\n", ACE_OS::getpid (), poa_delay, shutdown_delay));
{
ACE_CString status_file = base + ACE_CString(".status");
@@ -123,7 +126,7 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
ACE_OS::sleep (tv);
activatePOAs ();
- ACE_DEBUG ((LM_DEBUG, "(%P|%t) Activated POA pid = %d\n", ACE_OS::getpid ()));
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) Activated POA pid <%d>\n", ACE_OS::getpid ()));
TAO_Root_POA* tpoa = dynamic_cast<TAO_Root_POA*> (poa_a.in ());
ACE_ASSERT (tpoa != 0);
@@ -136,10 +139,13 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
test_ior = orb->object_to_string (tva.in());
base += "_a";
- ACE_DEBUG ((LM_DEBUG, "(%P|%t) %s:\n%s\n", base.c_str(), test_ior.in()));
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) %C:\n%C\n", base.c_str(), test_ior.in()));
table->bind (base.c_str (), test_ior.in ());
runner->wait ();
+
+ ACE_DEBUG ((LM_DEBUG, "(%P|%t) Destroying POA pid <%d>\n", ACE_OS::getpid ()));
+
root_poa->destroy(1,1);
orb->destroy();
}
@@ -152,6 +158,8 @@ ACE_TMAIN (int argc, ACE_TCHAR *argv[])
delete runner;
orb = CORBA::ORB::_nil ();
+ ACE_OS::sleep (shutdown_delay);
+
ACE_DEBUG ((LM_DEBUG, "(%P|%t) Exiting Server pid = %d \n",
ACE_OS::getpid ()));