summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorirfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-03-08 01:30:11 +0000
committerirfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2001-03-08 01:30:11 +0000
commit940c36afedea20a4fca68f1aceb930cdf0c72985 (patch)
tree0bf6842e73cfc35f9ad412fc4f62f39707df55c3
parentdcdd7ca068e55ebbfa9e0b78f333e5ebcad5d034 (diff)
downloadATCD-940c36afedea20a4fca68f1aceb930cdf0c72985.tar.gz
ChangeLogTag: Wed Mar 07 19:19:18 2001 Irfan Pyarali <irfan@cs.wustl.edu>
-rw-r--r--TAO/ChangeLogs/ChangeLog-02a74
-rw-r--r--TAO/tao/ORB_Core.cpp98
-rw-r--r--TAO/tao/ORB_Core.h2
-rw-r--r--TAO/tao/PortableServer/Object_Adapter.cpp34
-rw-r--r--TAO/tao/PortableServer/POA.cpp55
-rw-r--r--TAO/tao/PortableServer/POA.h6
-rw-r--r--TAO/tao/PortableServer/POA.i26
-rw-r--r--TAO/tao/PortableServer/Servant_Base.cpp42
-rw-r--r--TAO/tao/PortableServer/Servant_Base.h41
-rw-r--r--TAO/tests/POA/Makefile1
-rw-r--r--TAO/tests/POA/README9
-rw-r--r--TAO/tests/POA/Single_Threaded_POA/Makefile1062
-rw-r--r--TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.cpp208
-rw-r--r--TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.dsp203
-rw-r--r--TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.dsw28
-rw-r--r--TAO/tests/POA/Single_Threaded_POA/makefile.bor27
-rwxr-xr-xTAO/tests/POA/Single_Threaded_POA/run_test.pl27
-rw-r--r--TAO/tests/POA/Single_Threaded_POA/test.idl6
-rw-r--r--TAO/tests/TAO_Tests.dsw12
-rwxr-xr-xbin/auto_compile_win32.pl2
-rw-r--r--bin/auto_run_tests.lst1
21 files changed, 1769 insertions, 195 deletions
diff --git a/TAO/ChangeLogs/ChangeLog-02a b/TAO/ChangeLogs/ChangeLog-02a
index 4b5f8c28308..8fa2a69ca32 100644
--- a/TAO/ChangeLogs/ChangeLog-02a
+++ b/TAO/ChangeLogs/ChangeLog-02a
@@ -1,3 +1,77 @@
+Wed Mar 07 19:19:18 2001 Irfan Pyarali <irfan@cs.wustl.edu>
+
+ * tao/PortableServer:
+
+ The SINGLE_THREAD_MODEL was not implemented correctly in the
+ POA. As documented in Bug 483, the spec was misread to
+ understand that two threads cannot call the same servant in
+ a single threaded POA. The spec actually meant that any two
+ servants in a single threaded POA cannot be called
+ simultaneously. This was fixed by the following changes:
+
+ - There is one lock per single threaded POA instead of one
+ lock per servant.
+
+ - Since the lock is now on the POA instead of being on the
+ servant, there is no need to set up the per servant lock
+ when the servant is registered or when the servant is
+ removed from the POA. Thus the <teardown_servant_lock>
+ and the <establish_servant_lock> were removed from the
+ POA.
+
+ - The lock type was changed from regular to recursive.
+
+ * tests/POA/Single_Threaded_POA:
+
+ New test added. This program tests to make sure that two threads
+ cannot call servants in a single threaded POA simultaneously.
+ At the same time, it makes sure that a servant can call itself
+ or other servants in the same POA while in an upcall.
+
+ * Updated the following files wrt the new test:
+
+ ACE_wrappers/TAO/tests/TAO_Tests.dsw
+ ACE_wrappers/TAO/tests/POA/Makefile
+ ACE_wrappers/TAO/tests/POA/README
+ ACE_wrappers/bin/auto_compile_win32.pl
+ ACE_wrappers/bin/auto_run_tests.lst
+
+ * tao/ORB_Core.cpp:
+
+ - There was a memory leak when an ORB was not explicitly
+ destroyed or shutdown by the user. The fix was to call
+ TAO_ORB_Core::shutdown() from TAO_ORB_Core::fini(). This
+ will ensure that the Object Adapter(s) gets closed,
+ reactor registry is shutdown, the threads are canceled,
+ etc. when the user does not explicitly destroyed or
+ shutdown the ORB. This fixes move than Bug 406 since it
+ cleans up after the user even when the user does not call
+ shutdown() or destroy() on the ORB.
+
+ - There was a guard added to avoid repeated shutdowns and
+ then there was no need to guard repeated destroys.
+
+ - Ossama's change to make <root_poa_> a ptr from the
+ original var type was incorrect because he thought that
+ poa_adapter->root() doesn't return a duplicate. It
+ actually does duplicate (TAO_POA *root_poa() doesn't but
+ CORBA::Object_ptr root()does). Therefore, his change was
+ reverted.
+
+ - Moved destroy_interceptors() from destroy() to shutdown().
+ All destroy() should do is (a) call shutdown() and (b)
+ unbind() from the ORB table. Nothing else should really
+ be added to this method. Everything else should go to the
+ shutdown() method. Remember when the ORB Core is finally
+ removed from the ORB table, the reference count goes to
+ zero and fini() is called. fini() calls shutdown() and
+ does not call destory() since destroy() will try to unbind
+ from the ORB table again. Additional code should not be
+ added to destroy() since there is no guarantee that
+ orb->destroy() will ever be called by the user. Since TAO
+ guarantees that shutdown() will be called, all cleanup
+ code should go there.
+
Wed Mar 7 16:17:16 2001 Jeff Parsons <parsons@cs.wustl.edu>
* TAO_IDL/be/be_visitor_operation/operation_cs/cpp:
diff --git a/TAO/tao/ORB_Core.cpp b/TAO/tao/ORB_Core.cpp
index de1aea36419..ceafe359309 100644
--- a/TAO/tao/ORB_Core.cpp
+++ b/TAO/tao/ORB_Core.cpp
@@ -79,7 +79,7 @@ TAO_ORB_Core::TAO_ORB_Core (const char *orbid)
ior_manip_factory_ (CORBA::Object::_nil ()),
ior_table_ (CORBA::Object::_nil ()),
orb_ (),
- root_poa_ (CORBA::Object::_nil ()),
+ root_poa_ (),
orb_params_ (),
init_ref_map_ (),
object_ref_table_ (),
@@ -1142,6 +1142,25 @@ TAO_ORB_Core::RT_ORB_init (int &argc, char *argv[], CORBA::Environment &ACE_TRY_
int
TAO_ORB_Core::fini (void)
{
+ ACE_TRY_NEW_ENV
+ {
+ // Shutdown the ORB and block until the shutdown is complete.
+ this->shutdown (1,
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_CString message =
+ "Exception caught in trying to shutdown ";
+ message += this->orbid_;
+ message += "\n";
+
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ message.c_str ());
+ }
+ ACE_ENDTRY;
+
// Wait for any server threads, ignoring any failures.
(void) this->thr_mgr ()->wait ();
@@ -1205,22 +1224,18 @@ TAO_ORB_Core::fini (void)
(void) TAO_Internal::close_services ();
-
delete this->reactor_registry_;
-
// @@ This is not needed since the default resource factory
// is statically added to the service configurator, fredk
if (!this->resource_factory_from_service_config_)
delete resource_factory_;
-
// @@ This is not needed since the default client factory
// is statically added to the service configurator, fredk
if (!this->client_factory_from_service_config_)
delete client_factory_;
-
// @@ This is not needed since the default server factory
// is statically added to the service configurator, fredk
if (!this->server_factory_from_service_config_)
@@ -1543,8 +1558,8 @@ TAO_ORB_Core::inherit_from_parent_thread (
CORBA::Object_ptr
TAO_ORB_Core::root_poa (CORBA::Environment &ACE_TRY_ENV)
{
- if (!CORBA::is_nil (this->root_poa_))
- return CORBA::Object::_duplicate (this->root_poa_);
+ if (!CORBA::is_nil (this->root_poa_.in ()))
+ return CORBA::Object::_duplicate (this->root_poa_.in ());
TAO_Adapter_Factory *factory =
ACE_Dynamic_Service<TAO_Adapter_Factory>::instance ("TAO_POA");
@@ -1570,15 +1585,12 @@ TAO_ORB_Core::root_poa (CORBA::Environment &ACE_TRY_ENV)
poa_adapter->open (ACE_TRY_ENV);
ACE_CHECK_RETURN (CORBA::Object::_nil ());
- // @@ poa_adapter->root() is busted. It doesn't return a
- // duplicate. As such, this->root_poa_ is an Object_ptr, and is
- // not released by the ORB_Core.
this->root_poa_ = poa_adapter->root ();
this->adapter_registry_.insert (poa_adapter, ACE_TRY_ENV);
ACE_CHECK_RETURN (CORBA::Object::_nil ());
- return CORBA::Object::_duplicate (this->root_poa_);
+ return CORBA::Object::_duplicate (this->root_poa_.in ());
}
TAO_Adapter *
@@ -1952,37 +1964,55 @@ void
TAO_ORB_Core::shutdown (CORBA::Boolean wait_for_completion,
CORBA::Environment &ACE_TRY_ENV)
{
- this->adapter_registry_.check_close (wait_for_completion,
- ACE_TRY_ENV);
- this->adapter_registry_.close (wait_for_completion,
- ACE_TRY_ENV);
+ if (this->has_shutdown () == 0)
+ {
+ this->adapter_registry_.check_close (wait_for_completion,
+ ACE_TRY_ENV);
+ this->adapter_registry_.close (wait_for_completion,
+ ACE_TRY_ENV);
- // Set the shutdown flag
- this->has_shutdown_ = 1;
+ // Set the shutdown flag
+ this->has_shutdown_ = 1;
- // Shutdown all the reactors....
- this->reactor_registry_->shutdown_all ();
+ // Shutdown all the reactors....
+ this->reactor_registry_->shutdown_all ();
- // Grab the thread manager
- ACE_Thread_Manager *tm = this->thr_mgr ();
+ // Grab the thread manager
+ ACE_Thread_Manager *tm = this->thr_mgr ();
- // Try to cancel all the threads in the ORB.
- tm->cancel_all ();
+ // Try to cancel all the threads in the ORB.
+ tm->cancel_all ();
- // If <wait_for_completion> is set, wait for all threads to exit.
- if (wait_for_completion != 0)
- tm->wait ();
+ // If <wait_for_completion> is set, wait for all threads to exit.
+ if (wait_for_completion != 0)
+ tm->wait ();
+
+ // Invoke Interceptor::destroy() on all registered interceptors.
+ this->destroy_interceptors (ACE_TRY_ENV);
+ ACE_CHECK;
+ }
}
void
TAO_ORB_Core::destroy (CORBA_Environment &ACE_TRY_ENV)
{
- if (this->has_shutdown () == 0)
- {
- // Shutdown the ORB and block until the shutdown is complete.
- this->shutdown (1, ACE_TRY_ENV);
- ACE_CHECK;
- }
+ //
+ // All destroy() should do is (a) call shutdown() and (b) unbind()
+ // from the ORB table. Nothing else should really be added to this
+ // method. Everything else should go to the shutdown() method.
+ // Remember when the ORB Core is finally removed from the ORB table,
+ // the reference count goes to zero and fini() is called. fini()
+ // calls shutdown() and does not call destory() since destroy() will
+ // try to unbind from the ORB table again. Additional code should
+ // not be added to destroy() since there is no guarantee that
+ // orb->destroy() will ever be called by the user. Since TAO
+ // guarantees that shutdown() will be called, all cleanup code
+ // should go there.
+ //
+
+ // Shutdown the ORB and block until the shutdown is complete.
+ this->shutdown (1, ACE_TRY_ENV);
+ ACE_CHECK;
// Now remove it from the ORB table so that it's ORBid may be
// reused.
@@ -1991,10 +2021,6 @@ TAO_ORB_Core::destroy (CORBA_Environment &ACE_TRY_ENV)
*ACE_Static_Object_Lock::instance ()));
TAO_ORB_Table::instance ()->unbind (this->orbid_);
}
-
- // Invoke Interceptor::destroy() on all registered interceptors.
- this->destroy_interceptors (ACE_TRY_ENV);
- ACE_CHECK;
}
void
diff --git a/TAO/tao/ORB_Core.h b/TAO/tao/ORB_Core.h
index c5e9f44182f..ab7b6472129 100644
--- a/TAO/tao/ORB_Core.h
+++ b/TAO/tao/ORB_Core.h
@@ -978,7 +978,7 @@ protected:
/// Object reference to the root POA. It will eventually be the
/// object reference returned by calls to
/// CORBA::ORB::resolve_initial_references ("RootPOA").
- CORBA::Object_ptr root_poa_;
+ CORBA::Object_var root_poa_;
/// Parameters used by the ORB.
TAO_ORB_Parameters orb_params_;
diff --git a/TAO/tao/PortableServer/Object_Adapter.cpp b/TAO/tao/PortableServer/Object_Adapter.cpp
index 07f4668ad49..b872afadde7 100644
--- a/TAO/tao/PortableServer/Object_Adapter.cpp
+++ b/TAO/tao/PortableServer/Object_Adapter.cpp
@@ -116,8 +116,8 @@ TAO_Object_Adapter::TAO_Object_Adapter (const TAO_Server_Strategy_Factory::Activ
reverse_lock_ (*lock_),
non_servant_upcall_condition_ (thread_lock_),
non_servant_upcall_in_progress_ (0),
- non_servant_upcall_thread_ (ACE_OS::NULL_thread)
- , root_ (0)
+ non_servant_upcall_thread_ (ACE_OS::NULL_thread),
+ root_ (0)
{
TAO_Object_Adapter::set_transient_poa_name_size (creation_parameters);
@@ -354,9 +354,6 @@ TAO_Object_Adapter::activate_poa (const poa_name &folded_name,
iteratable_poa_name::iterator end = ipn.end ();
TAO_POA *parent = this->root_;
- // @@ PPOA: this->orb_core_.root_poa (ACE_TRY_ENV);
- // @@ PPOA: ACE_CHECK_RETURN (-1);
-
if (parent->name () != *iterator)
ACE_THROW_RETURN (CORBA::OBJ_ADAPTER (),
-1);
@@ -419,8 +416,6 @@ TAO_Object_Adapter::find_transient_poa (const poa_name &system_name,
if (root)
{
poa = this->root_;
- // @@ PPOA: this->orb_core_.root_poa (ACE_TRY_ENV);
- // @@ PPOA: ACE_CHECK_RETURN (-1);
}
else
{
@@ -565,8 +560,8 @@ TAO_Object_Adapter::open (CORBA::Environment &ACE_TRY_ENV)
ACE_CHECK;
// The Object_Adapter will keep a reference to the Root POA so that
- // on its destruction, it can check whether the Root POA has
- // been destroyed yet or not.
+ // on its destruction, it can check whether the Root POA has been
+ // destroyed yet or not.
this->root_->_add_ref ();
// Release the POA_Manager_var since we got here without error. The
@@ -1064,7 +1059,6 @@ TAO_Object_Adapter::Non_Servant_Upcall::~Non_Servant_Upcall (void)
this->object_adapter_.non_servant_upcall_condition_.broadcast ();
}
-// @@ PPOA TAO_Object_Adapter::Servant_Upcall::Servant_Upcall (TAO_Object_Adapter &object_adapter)
TAO_Object_Adapter::Servant_Upcall::Servant_Upcall (TAO_ORB_Core *oc)
: object_adapter_ (0),
poa_ (0),
@@ -1173,7 +1167,7 @@ TAO_Object_Adapter::Servant_Upcall::prepare_for_upcall (const TAO_ObjectKey &key
// use.
this->state_ = OBJECT_ADAPTER_LOCK_RELEASED;
- // Lock servant (if appropriate).
+ // Serialize servants (if appropriate).
this->single_threaded_poa_setup (ACE_TRY_ENV);
ACE_CHECK_RETURN (TAO_Adapter::DS_FAILED);
@@ -1286,15 +1280,6 @@ TAO_Object_Adapter::Servant_Upcall::servant_locator_cleanup (void)
if (this->using_servant_locator_)
{
- // If we are a single threaded POA, teardown the appropriate
- // locking in the servant.
- //
- // Note that teardown of the servant lock must happen before the
- // post_invoke() call since that might end up deleting the
- // servant.
- //
- this->poa_->teardown_servant_lock (this->servant_);
-
ACE_DECLARE_NEW_CORBA_ENV;
ACE_TRY
{
@@ -1320,8 +1305,7 @@ void
TAO_Object_Adapter::Servant_Upcall::single_threaded_poa_setup (CORBA::Environment &ACE_TRY_ENV)
{
#if (TAO_HAS_MINIMUM_POA == 0)
-
- // Lock servant (if necessary).
+ // Serialize servants (if necessary).
//
// Note that this lock must be acquired *after* the object adapter
// lock has been released. This is necessary since we cannot block
@@ -1331,7 +1315,7 @@ TAO_Object_Adapter::Servant_Upcall::single_threaded_poa_setup (CORBA::Environmen
// lock.
if (this->poa_->policies ().thread () == PortableServer::SINGLE_THREAD_MODEL)
{
- int result = this->servant_->_single_threaded_poa_lock ().acquire ();
+ int result = this->poa_->single_threaded_lock ().acquire ();
if (result == -1)
// Locking error.
@@ -1345,10 +1329,10 @@ TAO_Object_Adapter::Servant_Upcall::single_threaded_poa_setup (CORBA::Environmen
void
TAO_Object_Adapter::Servant_Upcall::single_threaded_poa_cleanup (void)
{
- // Since the servant lock was acquired, we must release it.
#if (TAO_HAS_MINIMUM_POA == 0)
+ // Since the servant lock was acquired, we must release it.
if (this->poa_->policies ().thread () == PortableServer::SINGLE_THREAD_MODEL)
- this->servant_->_single_threaded_poa_lock ().release ();
+ this->poa_->single_threaded_lock ().release ();
#endif /* TAO_HAS_MINIMUM_POA == 0 */
}
diff --git a/TAO/tao/PortableServer/POA.cpp b/TAO/tao/PortableServer/POA.cpp
index 9e3a0661ab0..8988ab88ccc 100644
--- a/TAO/tao/PortableServer/POA.cpp
+++ b/TAO/tao/PortableServer/POA.cpp
@@ -145,7 +145,8 @@ TAO_POA::TAO_POA (const TAO_POA::String &name,
wait_for_completion_pending_ (0),
waiting_destruction_ (0),
servant_deactivation_condition_ (thread_lock),
- waiting_servant_deactivation_ (0)
+ waiting_servant_deactivation_ (0),
+ single_threaded_lock_ (0)
{
// Set the folded name of this POA.
this->set_folded_name ();
@@ -168,6 +169,19 @@ TAO_POA::TAO_POA (const TAO_POA::String &name,
// Check for exception in construction of the active object map.
ACE_CHECK;
+#if (TAO_HAS_MINIMUM_POA == 0)
+
+ // Setup lock if POA is single threaded.
+ if (this->policies ().thread () == PortableServer::SINGLE_THREAD_MODEL)
+ {
+ ACE_NEW_THROW_EX (this->single_threaded_lock_,
+ TAO_SYNCH_RECURSIVE_MUTEX,
+ CORBA::NO_MEMORY ());
+
+ }
+
+#endif /* TAO_HAS_MINIMUM_POA == 0 */
+
// Create acceptor filter that will be used to construct ior for
// objects registering with this POA.
this->acceptor_filter_ = this->policies_.make_filter (ACE_TRY_ENV);
@@ -216,6 +230,8 @@ TAO_POA::TAO_POA (const TAO_POA::String &name,
TAO_POA::~TAO_POA (void)
{
delete this->acceptor_filter_;
+
+ delete this->single_threaded_lock_;
}
void
@@ -274,7 +290,6 @@ TAO_POA::complete_destruction_i (CORBA::Environment &ACE_TRY_ENV)
}
-
CORBA::release (this);
}
@@ -805,10 +820,6 @@ TAO_POA::set_servant_i (PortableServer::Servant servant,
servant->_add_ref (ACE_TRY_ENV);
ACE_CHECK;
-
- // If we are a single threaded POA, set up the appropriate
- // locking in the servant.
- this->establish_servant_lock (servant);
}
}
@@ -952,10 +963,6 @@ TAO_POA::activate_object_i (PortableServer::Servant servant,
servant->_add_ref (ACE_TRY_ENV);
ACE_CHECK_RETURN (0);
- // If we are a single threaded POA, set up the appropriate locking
- // in the servant.
- this->establish_servant_lock (servant);
-
return user_id._retn ();
}
@@ -1053,10 +1060,6 @@ TAO_POA::activate_object_with_id_i (const PortableServer::ObjectId &id,
// invoke _remove_ref on it the same number of times.
servant->_add_ref (ACE_TRY_ENV);
ACE_CHECK;
-
- // If we are a single threaded POA, set up the appropriate locking
- // in the servant.
- this->establish_servant_lock (servant);
}
void
@@ -1262,14 +1265,6 @@ TAO_POA::cleanup_servant (TAO_Active_Object_Map::Map_Entry *active_object_map_en
// First check for a non-zero servant.
if (active_object_map_entry->servant_)
{
- // If we are a single threaded POA, teardown the appropriate
- // locking in the servant.
- //
- // Note that teardown of the servant lock must happen before the
- // _remove_ref() or etherealize() calls since they might end up
- // deleting the servant.
- //
- this->teardown_servant_lock (active_object_map_entry->servant_);
#if (TAO_HAS_MINIMUM_POA == 0)
@@ -1617,10 +1612,6 @@ TAO_POA::servant_to_id_i (PortableServer::Servant servant,
servant->_add_ref (ACE_TRY_ENV);
ACE_CHECK_RETURN (0);
- // If we are a single threaded POA, set up the appropriate
- // locking in the servant.
- this->establish_servant_lock (servant);
-
return user_id._retn ();
}
@@ -1734,10 +1725,6 @@ TAO_POA::servant_to_system_id_i (PortableServer::Servant servant,
servant->_add_ref (ACE_TRY_ENV);
ACE_CHECK_RETURN (0);
- // If we are a single threaded POA, set up the appropriate
- // locking in the servant.
- this->establish_servant_lock (servant);
-
return system_id._retn ();
}
@@ -2462,10 +2449,6 @@ TAO_POA::locate_servant_i (const char *operation,
// Increment the reference count.
++servant_upcall.active_object_map_entry ()->reference_count_;
- // If we are a single threaded POA, set up the
- // appropriate locking in the servant.
- this->establish_servant_lock (servant);
-
// Success
return servant;
}
@@ -2508,10 +2491,6 @@ TAO_POA::locate_servant_i (const char *operation,
0);
}
- // If we are a single threaded POA, set up the
- // appropriate locking in the servant.
- this->establish_servant_lock (servant);
-
// Remember to invoke <postinvoke>
servant_upcall.using_servant_locator ();
diff --git a/TAO/tao/PortableServer/POA.h b/TAO/tao/PortableServer/POA.h
index c5920df443f..4da455f8abf 100644
--- a/TAO/tao/PortableServer/POA.h
+++ b/TAO/tao/PortableServer/POA.h
@@ -951,9 +951,7 @@ protected:
CORBA::ULong decrement_outstanding_requests (void);
- void establish_servant_lock (PortableServer::Servant servant);
-
- void teardown_servant_lock (PortableServer::Servant servant);
+ TAO_SYNCH_RECURSIVE_MUTEX &single_threaded_lock (void) const;
CORBA::Boolean waiting_destruction (void) const;
@@ -1032,6 +1030,8 @@ protected:
TAO_SYNCH_CONDITION servant_deactivation_condition_;
CORBA::ULong waiting_servant_deactivation_;
+
+ TAO_SYNCH_RECURSIVE_MUTEX *single_threaded_lock_;
};
diff --git a/TAO/tao/PortableServer/POA.i b/TAO/tao/PortableServer/POA.i
index 83e043e7421..baa06a04bbc 100644
--- a/TAO/tao/PortableServer/POA.i
+++ b/TAO/tao/PortableServer/POA.i
@@ -853,30 +853,10 @@ TAO_POA::waiting_destruction (void) const
return this->waiting_destruction_;
}
-ACE_INLINE void
-TAO_POA::establish_servant_lock (PortableServer::Servant servant)
+ACE_INLINE TAO_SYNCH_RECURSIVE_MUTEX &
+TAO_POA::single_threaded_lock (void) const
{
-#if (TAO_HAS_MINIMUM_POA == 0)
- if (this->policies ().thread () == PortableServer::SINGLE_THREAD_MODEL)
- {
- servant->_increment_single_threaded_poa_lock_count ();
- }
-#else /* TAO_HAS_MINIMUM_POA == 0 */
- ACE_UNUSED_ARG (servant);
-#endif /* TAO_HAS_MINIMUM_POA == 0 */
-}
-
-ACE_INLINE void
-TAO_POA::teardown_servant_lock (PortableServer::Servant servant)
-{
-#if (TAO_HAS_MINIMUM_POA == 0)
- if (this->policies ().thread () == PortableServer::SINGLE_THREAD_MODEL)
- {
- servant->_decrement_single_threaded_poa_lock_count ();
- }
-#else /* TAO_HAS_MINIMUM_POA == 0 */
- ACE_UNUSED_ARG (servant);
-#endif /* TAO_HAS_MINIMUM_POA == 0 */
+ return *this->single_threaded_lock_;
}
ACE_INLINE TAO_ORB_Core &
diff --git a/TAO/tao/PortableServer/Servant_Base.cpp b/TAO/tao/PortableServer/Servant_Base.cpp
index ee9bd0e96b1..817f6a7623d 100644
--- a/TAO/tao/PortableServer/Servant_Base.cpp
+++ b/TAO/tao/PortableServer/Servant_Base.cpp
@@ -40,16 +40,12 @@ ACE_TIMEPROBE_EVENT_DESCRIPTIONS (TAO_Servant_Base_Timeprobe_Description,
#endif /* ACE_ENABLE_TIMEPROBES */
TAO_ServantBase::TAO_ServantBase (void)
- : optable_ (0),
- single_threaded_poa_lock_ (0),
- single_threaded_poa_lock_count_ (0)
+ : optable_ (0)
{
}
TAO_ServantBase::TAO_ServantBase (const TAO_ServantBase &rhs)
- : optable_ (rhs.optable_),
- single_threaded_poa_lock_ (0),
- single_threaded_poa_lock_count_ (0)
+ : optable_ (rhs.optable_)
{
}
@@ -158,40 +154,6 @@ TAO_ServantBase::_create_stub (CORBA_Environment &ACE_TRY_ENV)
return stub;
}
-TAO_SYNCH_MUTEX &
-TAO_ServantBase::_single_threaded_poa_lock (void)
-{
- return *this->single_threaded_poa_lock_;
-}
-
-void
-TAO_ServantBase::_increment_single_threaded_poa_lock_count (void)
-{
- // Only one thread at a time through this code (guarantee provided
- // by the POA).
- u_long current_count = this->single_threaded_poa_lock_count_++;
-
- if (current_count == 0)
- {
- ACE_NEW (this->single_threaded_poa_lock_,
- TAO_SYNCH_MUTEX);
- }
-}
-
-void
-TAO_ServantBase::_decrement_single_threaded_poa_lock_count (void)
-{
- // Only one thread at a time through this code (guarantee provided
- // by the POA).
- u_long current_count = --this->single_threaded_poa_lock_count_;
-
- if (current_count == 0)
- {
- delete this->single_threaded_poa_lock_;
- this->single_threaded_poa_lock_ = 0;
- }
-}
-
void TAO_ServantBase::synchronous_upcall_dispatch (
TAO_ServerRequest &req,
void *context,
diff --git a/TAO/tao/PortableServer/Servant_Base.h b/TAO/tao/PortableServer/Servant_Base.h
index a028e806619..07e6ede83e4 100644
--- a/TAO/tao/PortableServer/Servant_Base.h
+++ b/TAO/tao/PortableServer/Servant_Base.h
@@ -27,7 +27,7 @@
class TAO_Operation_Table;
-class TAO_PortableServer_Export TAO_ServantBase
+class TAO_PortableServer_Export TAO_ServantBase
: public virtual TAO_Abstract_ServantBase
{
// = TITLE
@@ -46,24 +46,24 @@ public:
// Destructor.
virtual PortableServer::POA_ptr _default_POA (
- CORBA_Environment &ACE_TRY_ENV =
+ CORBA_Environment &ACE_TRY_ENV =
TAO_default_environment ()
);
// Returns the default POA for this servant.
virtual CORBA::Boolean _is_a (const char* logical_type_id,
- CORBA_Environment &ACE_TRY_ENV =
+ CORBA_Environment &ACE_TRY_ENV =
TAO_default_environment ());
// Local implementation of the CORBA::Object::_is_a method.
- virtual CORBA::Boolean _non_existent (CORBA_Environment &ACE_TRY_ENV =
+ virtual CORBA::Boolean _non_existent (CORBA_Environment &ACE_TRY_ENV =
TAO_default_environment ());
// Default <_non_existent>: always returns false.
virtual void *_downcast (const char *repository_id) = 0;
// Get the correct vtable.
- virtual TAO_Stub *_create_stub (CORBA_Environment &ACE_TRY_ENV =
+ virtual TAO_Stub *_create_stub (CORBA_Environment &ACE_TRY_ENV =
TAO_default_environment ());
// This is an auxiliar method for _this() and _narrow().
@@ -79,7 +79,7 @@ protected:
virtual void _dispatch (TAO_ServerRequest &request,
void *context,
- CORBA_Environment &ACE_TRY_ENV =
+ CORBA_Environment &ACE_TRY_ENV =
TAO_default_environment ()) = 0;
// Dispatches a request to the object: find the operation, cast the
// type to the most derived type, demarshall all the parameters from
@@ -104,30 +104,13 @@ protected:
virtual const char *_interface_repository_id (void) const = 0;
// Get this interface's repository id (TAO specific).
- // = Should be protected/private, but a nested class needs it.
-public:
- TAO_SYNCH_MUTEX &_single_threaded_poa_lock (void);
- // Access to the single threaded poa lock.
-
protected:
- void _increment_single_threaded_poa_lock_count (void);
- // New single threaded POA wants to use this lock.
-
- void _decrement_single_threaded_poa_lock_count (void);
- // Single threaded POA is no longer interested in this lock.
-
TAO_Operation_Table *optable_;
// The operation table for this servant, it is initialized by the
// most derived class.
-
- TAO_SYNCH_MUTEX *single_threaded_poa_lock_;
- // Lock for single threaded POAs.
-
- u_long single_threaded_poa_lock_count_;
- // Reference count for lock.
};
-class TAO_PortableServer_Export TAO_RefCountServantBase
+class TAO_PortableServer_Export TAO_RefCountServantBase
: public virtual TAO_ServantBase
{
// = TITLE
@@ -161,11 +144,11 @@ public:
~TAO_RefCountServantBase (void);
// Destructor.
- virtual void _add_ref (CORBA_Environment &ACE_TRY_ENV =
+ virtual void _add_ref (CORBA_Environment &ACE_TRY_ENV =
TAO_default_environment ());
// Increase reference count by one.
- virtual void _remove_ref (CORBA_Environment &ACE_TRY_ENV =
+ virtual void _remove_ref (CORBA_Environment &ACE_TRY_ENV =
TAO_default_environment ());
// Decreases reference count by one; if the resulting reference
// count equals zero, _remove_ref invokes delete on its this pointer
@@ -236,7 +219,7 @@ public:
// Returns hash value.
};
-class TAO_PortableServer_Export TAO_Local_ServantBase
+class TAO_PortableServer_Export TAO_Local_ServantBase
: public virtual TAO_ServantBase
{
// = TITLE
@@ -251,14 +234,14 @@ class TAO_PortableServer_Export TAO_Local_ServantBase
// registered with the POA.
//
protected:
- TAO_Stub *_create_stub (CORBA_Environment &ACE_TRY_ENV =
+ TAO_Stub *_create_stub (CORBA_Environment &ACE_TRY_ENV =
TAO_default_environment ());
// This is an auxiliar method for _this(). Make sure *not* to
// register with the default POA.
void _dispatch (TAO_ServerRequest &request,
void *context,
- CORBA_Environment &ACE_TRY_ENV =
+ CORBA_Environment &ACE_TRY_ENV =
TAO_default_environment ());
// Throws CORBA::BAD_OPERATION exception.
};
diff --git a/TAO/tests/POA/Makefile b/TAO/tests/POA/Makefile
index a3b2c562e78..d28bfe64c02 100644
--- a/TAO/tests/POA/Makefile
+++ b/TAO/tests/POA/Makefile
@@ -14,6 +14,7 @@ DIRS = Destruction \
wait_for_completion \
Deactivation \
Non_Servant_Upcalls \
+ Single_Threaded_POA \
Identity
# The following test hasn't been updated yet
diff --git a/TAO/tests/POA/README b/TAO/tests/POA/README
index 0da9ae069bb..0e78b4695b8 100644
--- a/TAO/tests/POA/README
+++ b/TAO/tests/POA/README
@@ -31,3 +31,12 @@ Object Adapter (POA) interfaces and their usage scenarios.
This program tests the <wait_for_completion> feature
of the POA.
+
+ . Single_Threaded_POA
+
+ This program tests to make sure that two threads
+ cannot call servants in a single threaded POA
+ simultaneously. At the same time, it makes sure that
+ a servant can call itself or other servants in the
+ same POA while in an upcall.
+
diff --git a/TAO/tests/POA/Single_Threaded_POA/Makefile b/TAO/tests/POA/Single_Threaded_POA/Makefile
new file mode 100644
index 00000000000..080cd6931d8
--- /dev/null
+++ b/TAO/tests/POA/Single_Threaded_POA/Makefile
@@ -0,0 +1,1062 @@
+#----------------------------------------------------------------------------
+#
+# $Id$
+#
+#----------------------------------------------------------------------------
+
+#----------------------------------------------------------------------------
+# Local macros
+#----------------------------------------------------------------------------
+
+ifndef TAO_ROOT
+ TAO_ROOT = $(ACE_ROOT)/TAO
+endif # ! TAO_ROOT
+
+LDLIBS = -lTAO
+
+IDL_FILES = test
+IDL_SRC = testC.cpp testS.cpp
+PROG_SRCS = $(IDL_SRC) Single_Threaded_POA.cpp
+
+LSRC = $(PROG_SRCS)
+
+SVR_OBJS = testC.o testS.o Single_Threaded_POA.o
+
+BIN_UNCHECKED = Single_Threaded_POA
+
+TAO_IDLFLAGS += -Ge 1
+
+#----------------------------------------------------------------------------
+# Include macros and targets
+#----------------------------------------------------------------------------
+
+include $(ACE_ROOT)/include/makeinclude/wrapper_macros.GNU
+include $(ACE_ROOT)/include/makeinclude/macros.GNU
+include $(TAO_ROOT)/rules.tao.GNU
+
+ifeq ($(minimum_corba),0)
+ BIN = $(BIN_UNCHECKED)
+endif # minimum_corba
+
+include $(ACE_ROOT)/include/makeinclude/rules.common.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.nonested.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.bin.GNU
+include $(ACE_ROOT)/include/makeinclude/rules.local.GNU
+
+.PRECIOUS: testC.h testC.i testC.cpp testS.h testS.i testS.cpp testS_T.h testS_T.i testS_T.cpp
+
+Single_Threaded_POA: $(addprefix $(VDIR),$(SVR_OBJS))
+ $(LINK.cc) $(LDFLAGS) -o $@ $^ $(TAO_SRVR_LIBS) $(POSTLINK)
+
+realclean: clean
+ -$(RM) testC.* testS.* testS_T.*
+
+# DO NOT DELETE THIS LINE -- g++dep uses it.
+# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
+
+
+.obj/testC.o .obj/testC.so .shobj/testC.o .shobj/testC.so: testC.cpp testC.h \
+ $(TAO_ROOT)/tao/corba.h \
+ $(ACE_ROOT)/ace/pre.h \
+ $(ACE_ROOT)/ace/post.h \
+ $(ACE_ROOT)/ace/ACE_export.h \
+ $(ACE_ROOT)/ace/svc_export.h \
+ $(ACE_ROOT)/ace/ace_wchar.h \
+ $(ACE_ROOT)/ace/ace_wchar.inl \
+ $(ACE_ROOT)/ace/OS_Errno.h \
+ $(ACE_ROOT)/ace/OS_Export.h \
+ $(ACE_ROOT)/ace/OS_Errno.inl \
+ $(TAO_ROOT)/tao/corbafwd.h \
+ $(ACE_ROOT)/ace/CDR_Base.h \
+ $(ACE_ROOT)/ace/Basic_Types.h \
+ $(ACE_ROOT)/ace/Basic_Types.i \
+ $(ACE_ROOT)/ace/Message_Block.h \
+ $(ACE_ROOT)/ace/ACE.h \
+ $(ACE_ROOT)/ace/OS.h \
+ $(ACE_ROOT)/ace/OS_Dirent.h \
+ $(ACE_ROOT)/ace/OS_Dirent.inl \
+ $(ACE_ROOT)/ace/OS_String.h \
+ $(ACE_ROOT)/ace/OS_String.inl \
+ $(ACE_ROOT)/ace/OS_Memory.h \
+ $(ACE_ROOT)/ace/OS_Memory.inl \
+ $(ACE_ROOT)/ace/OS_TLI.h \
+ $(ACE_ROOT)/ace/OS_TLI.inl \
+ $(ACE_ROOT)/ace/Min_Max.h \
+ $(ACE_ROOT)/ace/streams.h \
+ $(ACE_ROOT)/ace/Trace.h \
+ $(ACE_ROOT)/ace/OS.i \
+ $(ACE_ROOT)/ace/Flag_Manip.h \
+ $(ACE_ROOT)/ace/Flag_Manip.i \
+ $(ACE_ROOT)/ace/Handle_Ops.h \
+ $(ACE_ROOT)/ace/Handle_Ops.i \
+ $(ACE_ROOT)/ace/Lib_Find.h \
+ $(ACE_ROOT)/ace/Lib_Find.i \
+ $(ACE_ROOT)/ace/Init_ACE.h \
+ $(ACE_ROOT)/ace/Init_ACE.i \
+ $(ACE_ROOT)/ace/Sock_Connect.h \
+ $(ACE_ROOT)/ace/Sock_Connect.i \
+ $(ACE_ROOT)/ace/ACE.i \
+ $(ACE_ROOT)/ace/Malloc.h \
+ $(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/OS_Log_Msg_Attributes.h \
+ $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.inl \
+ $(ACE_ROOT)/ace/Malloc.i \
+ $(ACE_ROOT)/ace/Malloc_T.h \
+ $(ACE_ROOT)/ace/Synch.h \
+ $(ACE_ROOT)/ace/Synch.i \
+ $(ACE_ROOT)/ace/Synch_T.h \
+ $(ACE_ROOT)/ace/Synch_T.i \
+ $(ACE_ROOT)/ace/Thread.h \
+ $(ACE_ROOT)/ace/Thread_Adapter.h \
+ $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
+ $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \
+ $(ACE_ROOT)/ace/Thread_Adapter.inl \
+ $(ACE_ROOT)/ace/Thread.i \
+ $(ACE_ROOT)/ace/Atomic_Op.i \
+ $(ACE_ROOT)/ace/Synch_T.cpp \
+ $(ACE_ROOT)/ace/Malloc_Allocator.h \
+ $(ACE_ROOT)/ace/Malloc_Base.h \
+ $(ACE_ROOT)/ace/Malloc_Allocator.i \
+ $(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/Event_Handler.h \
+ $(ACE_ROOT)/ace/Event_Handler.i \
+ $(ACE_ROOT)/ace/Signal.h \
+ $(ACE_ROOT)/ace/Containers.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/Signal.i \
+ $(ACE_ROOT)/ace/Mem_Map.h \
+ $(ACE_ROOT)/ace/Mem_Map.i \
+ $(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/Memory_Pool.i \
+ $(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/CDR_Base.inl \
+ $(TAO_ROOT)/tao/try_macros.h \
+ $(TAO_ROOT)/tao/orbconf.h \
+ $(ACE_ROOT)/ace/CORBA_macros.h \
+ $(TAO_ROOT)/tao/varbase.h \
+ $(TAO_ROOT)/tao/TAO_Export.h \
+ $(TAO_ROOT)/tao/corbafwd.i \
+ $(TAO_ROOT)/tao/Environment.h \
+ $(TAO_ROOT)/tao/Environment.i \
+ $(TAO_ROOT)/tao/ORB.h \
+ $(TAO_ROOT)/tao/Exception.h \
+ $(ACE_ROOT)/ace/SString.h \
+ $(ACE_ROOT)/ace/SString.i \
+ $(TAO_ROOT)/tao/Exception.i \
+ $(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/Services.i \
+ $(TAO_ROOT)/tao/CORBA_String.h \
+ $(TAO_ROOT)/tao/CORBA_String.inl \
+ $(TAO_ROOT)/tao/PolicyC.h \
+ $(TAO_ROOT)/tao/CurrentC.h \
+ $(TAO_ROOT)/tao/Object.h \
+ $(TAO_ROOT)/tao/Abstract_Servant_Base.h \
+ $(TAO_ROOT)/tao/Object_Proxy_Broker.h \
+ $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/Object.i \
+ $(TAO_ROOT)/tao/CurrentC.i \
+ $(TAO_ROOT)/tao/Encodable.h \
+ $(TAO_ROOT)/tao/CDR.h \
+ $(ACE_ROOT)/ace/CDR_Stream.h \
+ $(ACE_ROOT)/ace/CDR_Stream.i \
+ $(TAO_ROOT)/tao/CDR.i \
+ $(TAO_ROOT)/tao/Typecode.h \
+ $(TAO_ROOT)/tao/Typecode.i \
+ $(TAO_ROOT)/tao/PolicyC.i \
+ $(TAO_ROOT)/tao/ORB.i \
+ $(TAO_ROOT)/tao/Any.h \
+ $(TAO_ROOT)/tao/Any.i \
+ $(TAO_ROOT)/tao/NVList.h \
+ $(TAO_ROOT)/tao/NVList.i \
+ $(TAO_ROOT)/tao/Principal.h \
+ $(TAO_ROOT)/tao/OctetSeqC.h \
+ $(TAO_ROOT)/tao/OctetSeqC.i \
+ $(TAO_ROOT)/tao/Principal.i \
+ $(TAO_ROOT)/tao/TAO_Server_Request.h \
+ $(TAO_ROOT)/tao/Tagged_Profile.h \
+ $(TAO_ROOT)/tao/IOPC.h \
+ $(TAO_ROOT)/tao/IOPC.i \
+ $(TAO_ROOT)/tao/GIOPC.h \
+ $(TAO_ROOT)/tao/Object_KeyC.h \
+ $(TAO_ROOT)/tao/Object_KeyC.i \
+ $(TAO_ROOT)/tao/GIOPC.i \
+ $(TAO_ROOT)/tao/Tagged_Profile.i \
+ $(TAO_ROOT)/tao/Service_Context.h \
+ $(TAO_ROOT)/tao/Service_Context.inl \
+ $(TAO_ROOT)/tao/TAO_Server_Request.i \
+ $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/LocalObject.h \
+ $(TAO_ROOT)/tao/LocalObject.i \
+ $(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/GIOP_Message_State.h \
+ $(TAO_ROOT)/tao/GIOP_Message_State.i \
+ $(TAO_ROOT)/tao/Profile.i \
+ $(TAO_ROOT)/tao/MProfile.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 \
+ $(ACE_ROOT)/ace/Service_Object.h \
+ $(ACE_ROOT)/ace/Shared_Object.h \
+ $(ACE_ROOT)/ace/Shared_Object.i \
+ $(ACE_ROOT)/ace/Service_Object.i \
+ $(TAO_ROOT)/tao/Protocol_Factory.h \
+ $(TAO_ROOT)/tao/params.h \
+ $(TAO_ROOT)/tao/params.i \
+ $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
+ $(TAO_ROOT)/tao/TAO_Singleton_Manager.inl \
+ $(TAO_ROOT)/tao/TAO_Singleton.h \
+ $(TAO_ROOT)/tao/TAO_Singleton.inl \
+ $(TAO_ROOT)/tao/TAO_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 \
+ $(TAO_ROOT)/tao/Adapter.h \
+ $(TAO_ROOT)/tao/Adapter.i \
+ $(TAO_ROOT)/tao/PolicyFactory_Registry.h \
+ $(TAO_ROOT)/tao/PortableInterceptorC.h \
+ $(TAO_ROOT)/tao/DynamicC.h \
+ $(TAO_ROOT)/tao/DynamicC.i \
+ $(TAO_ROOT)/tao/MessagingC.h \
+ $(TAO_ROOT)/tao/ValueBase.h \
+ $(TAO_ROOT)/tao/ValueBase.i \
+ $(TAO_ROOT)/tao/ValueFactory.h \
+ $(TAO_ROOT)/tao/ValueFactory.i \
+ $(TAO_ROOT)/tao/TimeBaseC.h \
+ $(TAO_ROOT)/tao/TimeBaseC.i \
+ $(TAO_ROOT)/tao/PollableC.h \
+ $(TAO_ROOT)/tao/PollableC.i \
+ $(TAO_ROOT)/tao/MessagingC.i \
+ $(TAO_ROOT)/tao/PortableInterceptorC.i \
+ $(ACE_ROOT)/ace/Map_Manager.h \
+ $(ACE_ROOT)/ace/Map_Manager.i \
+ $(ACE_ROOT)/ace/Map_Manager.cpp \
+ $(ACE_ROOT)/ace/Service_Config.h \
+ $(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/Test_and_Set.h \
+ $(ACE_ROOT)/ace/Test_and_Set.i \
+ $(ACE_ROOT)/ace/Test_and_Set.cpp \
+ $(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 \
+ $(TAO_ROOT)/tao/Parser_Registry.h \
+ $(TAO_ROOT)/tao/Parser_Registry.i \
+ $(TAO_ROOT)/tao/Service_Callbacks.h \
+ $(TAO_ROOT)/tao/Service_Callbacks.i \
+ $(TAO_ROOT)/tao/Fault_Tolerance_Service.h \
+ $(TAO_ROOT)/tao/Fault_Tolerance_Service.i \
+ $(TAO_ROOT)/tao/Connection_Cache_Manager.h \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.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_T.i \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
+ $(TAO_ROOT)/tao/Cache_Entries.h \
+ $(TAO_ROOT)/tao/Connection_Descriptor_Interface.h \
+ $(TAO_ROOT)/tao/Endpoint.h \
+ $(TAO_ROOT)/tao/Endpoint.i \
+ $(TAO_ROOT)/tao/Connection_Descriptor_Interface.inl \
+ $(TAO_ROOT)/tao/Cache_Entries.inl \
+ $(TAO_ROOT)/tao/Connection_Cache_Manager.inl \
+ $(TAO_ROOT)/tao/Cleanup_Func_Registry.h \
+ $(TAO_ROOT)/tao/Cleanup_Func_Registry.inl \
+ $(TAO_ROOT)/tao/Object_Ref_Table.h \
+ $(TAO_ROOT)/tao/Interceptor_List.h \
+ $(TAO_ROOT)/tao/Interceptor_List.inl \
+ $(TAO_ROOT)/tao/RT_Policy_i.h \
+ $(TAO_ROOT)/tao/RTCORBAS.h \
+ $(TAO_ROOT)/tao/IOPS.h \
+ $(TAO_ROOT)/tao/IOPS_T.h \
+ $(TAO_ROOT)/tao/IOPS_T.i \
+ $(TAO_ROOT)/tao/IOPS_T.cpp \
+ $(TAO_ROOT)/tao/IOPS.i \
+ $(TAO_ROOT)/tao/TimeBaseS.h \
+ $(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)/tao/RTCORBAC.h \
+ $(TAO_ROOT)/tao/RTCORBAC.i \
+ $(TAO_ROOT)/tao/RTCORBAS_T.h \
+ $(TAO_ROOT)/tao/RTCORBAS_T.i \
+ $(TAO_ROOT)/tao/RTCORBAS_T.cpp \
+ $(TAO_ROOT)/tao/RTCORBAS.i \
+ $(TAO_ROOT)/tao/RT_Policy_i.i \
+ $(TAO_ROOT)/tao/Protocols_Hooks.h \
+ $(ACE_ROOT)/ace/Hash_Map_Manager.h \
+ $(ACE_ROOT)/ace/Thread_Manager.h \
+ $(ACE_ROOT)/ace/Singleton.h \
+ $(ACE_ROOT)/ace/Singleton.i \
+ $(ACE_ROOT)/ace/Singleton.cpp \
+ $(ACE_ROOT)/ace/Thread_Manager.i \
+ $(TAO_ROOT)/tao/ORB_Core.i \
+ $(TAO_ROOT)/tao/Stub.i \
+ $(TAO_ROOT)/tao/debug.h \
+ $(TAO_ROOT)/tao/Client_Strategy_Factory.h \
+ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \
+ $(TAO_ROOT)/tao/Invocation.h \
+ $(TAO_ROOT)/tao/Synch_Reply_Dispatcher.h \
+ $(TAO_ROOT)/tao/Reply_Dispatcher.h \
+ $(TAO_ROOT)/tao/Reply_Dispatcher.i \
+ $(TAO_ROOT)/tao/TAOC.h \
+ $(TAO_ROOT)/tao/Priority_Mapping_Manager.h \
+ $(TAO_ROOT)/tao/Priority_Mapping.h \
+ $(TAO_ROOT)/tao/Priority_Mapping.i \
+ $(TAO_ROOT)/tao/Priority_Mapping_Manager.i \
+ $(TAO_ROOT)/tao/TAOC.i \
+ $(TAO_ROOT)/tao/operation_details.h \
+ $(TAO_ROOT)/tao/target_specification.h \
+ $(TAO_ROOT)/tao/target_specification.i \
+ $(TAO_ROOT)/tao/operation_details.i \
+ $(TAO_ROOT)/tao/Invocation_Endpoint_Selectors.h \
+ $(TAO_ROOT)/tao/Invocation_Endpoint_Selectors.i \
+ $(TAO_ROOT)/tao/Invocation.i \
+ $(TAO_ROOT)/tao/ObjectIDList.h \
+ $(TAO_ROOT)/tao/ObjectIDList.i \
+ $(TAO_ROOT)/tao/DomainC.h \
+ $(TAO_ROOT)/tao/ClientRequestInfo.h \
+ $(TAO_ROOT)/tao/StringSeqC.h \
+ $(TAO_ROOT)/tao/StringSeqC.i \
+ $(TAO_ROOT)/tao/ClientRequestInfo.inl \
+ $(TAO_ROOT)/tao/DomainC.i \
+ $(TAO_ROOT)/tao/WrongTransactionC.h \
+ $(TAO_ROOT)/tao/BoundsC.h \
+ $(TAO_ROOT)/tao/BoundsC.i \
+ $(TAO_ROOT)/tao/PortableInterceptor.h \
+ $(TAO_ROOT)/tao/PortableInterceptor.i \
+ $(TAO_ROOT)/tao/BiDirPolicyC.h \
+ $(TAO_ROOT)/tao/BiDirPolicyC.i \
+ testC.i \
+ $(TAO_ROOT)/tao/RequestInfo_Util.h
+
+.obj/testS.o .obj/testS.so .shobj/testS.o .shobj/testS.so: testS.cpp testS.h testC.h \
+ $(TAO_ROOT)/tao/corba.h \
+ $(ACE_ROOT)/ace/pre.h \
+ $(ACE_ROOT)/ace/post.h \
+ $(ACE_ROOT)/ace/ACE_export.h \
+ $(ACE_ROOT)/ace/svc_export.h \
+ $(ACE_ROOT)/ace/ace_wchar.h \
+ $(ACE_ROOT)/ace/ace_wchar.inl \
+ $(ACE_ROOT)/ace/OS_Errno.h \
+ $(ACE_ROOT)/ace/OS_Export.h \
+ $(ACE_ROOT)/ace/OS_Errno.inl \
+ $(TAO_ROOT)/tao/corbafwd.h \
+ $(ACE_ROOT)/ace/CDR_Base.h \
+ $(ACE_ROOT)/ace/Basic_Types.h \
+ $(ACE_ROOT)/ace/Basic_Types.i \
+ $(ACE_ROOT)/ace/Message_Block.h \
+ $(ACE_ROOT)/ace/ACE.h \
+ $(ACE_ROOT)/ace/OS.h \
+ $(ACE_ROOT)/ace/OS_Dirent.h \
+ $(ACE_ROOT)/ace/OS_Dirent.inl \
+ $(ACE_ROOT)/ace/OS_String.h \
+ $(ACE_ROOT)/ace/OS_String.inl \
+ $(ACE_ROOT)/ace/OS_Memory.h \
+ $(ACE_ROOT)/ace/OS_Memory.inl \
+ $(ACE_ROOT)/ace/OS_TLI.h \
+ $(ACE_ROOT)/ace/OS_TLI.inl \
+ $(ACE_ROOT)/ace/Min_Max.h \
+ $(ACE_ROOT)/ace/streams.h \
+ $(ACE_ROOT)/ace/Trace.h \
+ $(ACE_ROOT)/ace/OS.i \
+ $(ACE_ROOT)/ace/Flag_Manip.h \
+ $(ACE_ROOT)/ace/Flag_Manip.i \
+ $(ACE_ROOT)/ace/Handle_Ops.h \
+ $(ACE_ROOT)/ace/Handle_Ops.i \
+ $(ACE_ROOT)/ace/Lib_Find.h \
+ $(ACE_ROOT)/ace/Lib_Find.i \
+ $(ACE_ROOT)/ace/Init_ACE.h \
+ $(ACE_ROOT)/ace/Init_ACE.i \
+ $(ACE_ROOT)/ace/Sock_Connect.h \
+ $(ACE_ROOT)/ace/Sock_Connect.i \
+ $(ACE_ROOT)/ace/ACE.i \
+ $(ACE_ROOT)/ace/Malloc.h \
+ $(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/OS_Log_Msg_Attributes.h \
+ $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.inl \
+ $(ACE_ROOT)/ace/Malloc.i \
+ $(ACE_ROOT)/ace/Malloc_T.h \
+ $(ACE_ROOT)/ace/Synch.h \
+ $(ACE_ROOT)/ace/Synch.i \
+ $(ACE_ROOT)/ace/Synch_T.h \
+ $(ACE_ROOT)/ace/Synch_T.i \
+ $(ACE_ROOT)/ace/Thread.h \
+ $(ACE_ROOT)/ace/Thread_Adapter.h \
+ $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
+ $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \
+ $(ACE_ROOT)/ace/Thread_Adapter.inl \
+ $(ACE_ROOT)/ace/Thread.i \
+ $(ACE_ROOT)/ace/Atomic_Op.i \
+ $(ACE_ROOT)/ace/Synch_T.cpp \
+ $(ACE_ROOT)/ace/Malloc_Allocator.h \
+ $(ACE_ROOT)/ace/Malloc_Base.h \
+ $(ACE_ROOT)/ace/Malloc_Allocator.i \
+ $(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/Event_Handler.h \
+ $(ACE_ROOT)/ace/Event_Handler.i \
+ $(ACE_ROOT)/ace/Signal.h \
+ $(ACE_ROOT)/ace/Containers.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/Signal.i \
+ $(ACE_ROOT)/ace/Mem_Map.h \
+ $(ACE_ROOT)/ace/Mem_Map.i \
+ $(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/Memory_Pool.i \
+ $(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/CDR_Base.inl \
+ $(TAO_ROOT)/tao/try_macros.h \
+ $(TAO_ROOT)/tao/orbconf.h \
+ $(ACE_ROOT)/ace/CORBA_macros.h \
+ $(TAO_ROOT)/tao/varbase.h \
+ $(TAO_ROOT)/tao/TAO_Export.h \
+ $(TAO_ROOT)/tao/corbafwd.i \
+ $(TAO_ROOT)/tao/Environment.h \
+ $(TAO_ROOT)/tao/Environment.i \
+ $(TAO_ROOT)/tao/ORB.h \
+ $(TAO_ROOT)/tao/Exception.h \
+ $(ACE_ROOT)/ace/SString.h \
+ $(ACE_ROOT)/ace/SString.i \
+ $(TAO_ROOT)/tao/Exception.i \
+ $(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/Services.i \
+ $(TAO_ROOT)/tao/CORBA_String.h \
+ $(TAO_ROOT)/tao/CORBA_String.inl \
+ $(TAO_ROOT)/tao/PolicyC.h \
+ $(TAO_ROOT)/tao/CurrentC.h \
+ $(TAO_ROOT)/tao/Object.h \
+ $(TAO_ROOT)/tao/Abstract_Servant_Base.h \
+ $(TAO_ROOT)/tao/Object_Proxy_Broker.h \
+ $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/Object.i \
+ $(TAO_ROOT)/tao/CurrentC.i \
+ $(TAO_ROOT)/tao/Encodable.h \
+ $(TAO_ROOT)/tao/CDR.h \
+ $(ACE_ROOT)/ace/CDR_Stream.h \
+ $(ACE_ROOT)/ace/CDR_Stream.i \
+ $(TAO_ROOT)/tao/CDR.i \
+ $(TAO_ROOT)/tao/Typecode.h \
+ $(TAO_ROOT)/tao/Typecode.i \
+ $(TAO_ROOT)/tao/PolicyC.i \
+ $(TAO_ROOT)/tao/ORB.i \
+ $(TAO_ROOT)/tao/Any.h \
+ $(TAO_ROOT)/tao/Any.i \
+ $(TAO_ROOT)/tao/NVList.h \
+ $(TAO_ROOT)/tao/NVList.i \
+ $(TAO_ROOT)/tao/Principal.h \
+ $(TAO_ROOT)/tao/OctetSeqC.h \
+ $(TAO_ROOT)/tao/OctetSeqC.i \
+ $(TAO_ROOT)/tao/Principal.i \
+ $(TAO_ROOT)/tao/TAO_Server_Request.h \
+ $(TAO_ROOT)/tao/Tagged_Profile.h \
+ $(TAO_ROOT)/tao/IOPC.h \
+ $(TAO_ROOT)/tao/IOPC.i \
+ $(TAO_ROOT)/tao/GIOPC.h \
+ $(TAO_ROOT)/tao/Object_KeyC.h \
+ $(TAO_ROOT)/tao/Object_KeyC.i \
+ $(TAO_ROOT)/tao/GIOPC.i \
+ $(TAO_ROOT)/tao/Tagged_Profile.i \
+ $(TAO_ROOT)/tao/Service_Context.h \
+ $(TAO_ROOT)/tao/Service_Context.inl \
+ $(TAO_ROOT)/tao/TAO_Server_Request.i \
+ $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/LocalObject.h \
+ $(TAO_ROOT)/tao/LocalObject.i \
+ $(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/GIOP_Message_State.h \
+ $(TAO_ROOT)/tao/GIOP_Message_State.i \
+ $(TAO_ROOT)/tao/Profile.i \
+ $(TAO_ROOT)/tao/MProfile.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 \
+ $(ACE_ROOT)/ace/Service_Object.h \
+ $(ACE_ROOT)/ace/Shared_Object.h \
+ $(ACE_ROOT)/ace/Shared_Object.i \
+ $(ACE_ROOT)/ace/Service_Object.i \
+ $(TAO_ROOT)/tao/Protocol_Factory.h \
+ $(TAO_ROOT)/tao/params.h \
+ $(TAO_ROOT)/tao/params.i \
+ $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
+ $(TAO_ROOT)/tao/TAO_Singleton_Manager.inl \
+ $(TAO_ROOT)/tao/TAO_Singleton.h \
+ $(TAO_ROOT)/tao/TAO_Singleton.inl \
+ $(TAO_ROOT)/tao/TAO_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 \
+ $(TAO_ROOT)/tao/Adapter.h \
+ $(TAO_ROOT)/tao/Adapter.i \
+ $(TAO_ROOT)/tao/PolicyFactory_Registry.h \
+ $(TAO_ROOT)/tao/PortableInterceptorC.h \
+ $(TAO_ROOT)/tao/DynamicC.h \
+ $(TAO_ROOT)/tao/DynamicC.i \
+ $(TAO_ROOT)/tao/MessagingC.h \
+ $(TAO_ROOT)/tao/ValueBase.h \
+ $(TAO_ROOT)/tao/ValueBase.i \
+ $(TAO_ROOT)/tao/ValueFactory.h \
+ $(TAO_ROOT)/tao/ValueFactory.i \
+ $(TAO_ROOT)/tao/TimeBaseC.h \
+ $(TAO_ROOT)/tao/TimeBaseC.i \
+ $(TAO_ROOT)/tao/PollableC.h \
+ $(TAO_ROOT)/tao/PollableC.i \
+ $(TAO_ROOT)/tao/MessagingC.i \
+ $(TAO_ROOT)/tao/PortableInterceptorC.i \
+ $(ACE_ROOT)/ace/Map_Manager.h \
+ $(ACE_ROOT)/ace/Map_Manager.i \
+ $(ACE_ROOT)/ace/Map_Manager.cpp \
+ $(ACE_ROOT)/ace/Service_Config.h \
+ $(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/Test_and_Set.h \
+ $(ACE_ROOT)/ace/Test_and_Set.i \
+ $(ACE_ROOT)/ace/Test_and_Set.cpp \
+ $(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 \
+ $(TAO_ROOT)/tao/Parser_Registry.h \
+ $(TAO_ROOT)/tao/Parser_Registry.i \
+ $(TAO_ROOT)/tao/Service_Callbacks.h \
+ $(TAO_ROOT)/tao/Service_Callbacks.i \
+ $(TAO_ROOT)/tao/Fault_Tolerance_Service.h \
+ $(TAO_ROOT)/tao/Fault_Tolerance_Service.i \
+ $(TAO_ROOT)/tao/Connection_Cache_Manager.h \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.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_T.i \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
+ $(TAO_ROOT)/tao/Cache_Entries.h \
+ $(TAO_ROOT)/tao/Connection_Descriptor_Interface.h \
+ $(TAO_ROOT)/tao/Endpoint.h \
+ $(TAO_ROOT)/tao/Endpoint.i \
+ $(TAO_ROOT)/tao/Connection_Descriptor_Interface.inl \
+ $(TAO_ROOT)/tao/Cache_Entries.inl \
+ $(TAO_ROOT)/tao/Connection_Cache_Manager.inl \
+ $(TAO_ROOT)/tao/Cleanup_Func_Registry.h \
+ $(TAO_ROOT)/tao/Cleanup_Func_Registry.inl \
+ $(TAO_ROOT)/tao/Object_Ref_Table.h \
+ $(TAO_ROOT)/tao/Interceptor_List.h \
+ $(TAO_ROOT)/tao/Interceptor_List.inl \
+ $(TAO_ROOT)/tao/RT_Policy_i.h \
+ $(TAO_ROOT)/tao/RTCORBAS.h \
+ $(TAO_ROOT)/tao/IOPS.h \
+ $(TAO_ROOT)/tao/IOPS_T.h \
+ $(TAO_ROOT)/tao/IOPS_T.i \
+ $(TAO_ROOT)/tao/IOPS_T.cpp \
+ $(TAO_ROOT)/tao/IOPS.i \
+ $(TAO_ROOT)/tao/TimeBaseS.h \
+ $(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)/tao/RTCORBAC.h \
+ $(TAO_ROOT)/tao/RTCORBAC.i \
+ $(TAO_ROOT)/tao/RTCORBAS_T.h \
+ $(TAO_ROOT)/tao/RTCORBAS_T.i \
+ $(TAO_ROOT)/tao/RTCORBAS_T.cpp \
+ $(TAO_ROOT)/tao/RTCORBAS.i \
+ $(TAO_ROOT)/tao/RT_Policy_i.i \
+ $(TAO_ROOT)/tao/Protocols_Hooks.h \
+ $(ACE_ROOT)/ace/Hash_Map_Manager.h \
+ $(ACE_ROOT)/ace/Thread_Manager.h \
+ $(ACE_ROOT)/ace/Singleton.h \
+ $(ACE_ROOT)/ace/Singleton.i \
+ $(ACE_ROOT)/ace/Singleton.cpp \
+ $(ACE_ROOT)/ace/Thread_Manager.i \
+ $(TAO_ROOT)/tao/ORB_Core.i \
+ $(TAO_ROOT)/tao/Stub.i \
+ $(TAO_ROOT)/tao/debug.h \
+ $(TAO_ROOT)/tao/Client_Strategy_Factory.h \
+ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \
+ $(TAO_ROOT)/tao/Invocation.h \
+ $(TAO_ROOT)/tao/Synch_Reply_Dispatcher.h \
+ $(TAO_ROOT)/tao/Reply_Dispatcher.h \
+ $(TAO_ROOT)/tao/Reply_Dispatcher.i \
+ $(TAO_ROOT)/tao/TAOC.h \
+ $(TAO_ROOT)/tao/Priority_Mapping_Manager.h \
+ $(TAO_ROOT)/tao/Priority_Mapping.h \
+ $(TAO_ROOT)/tao/Priority_Mapping.i \
+ $(TAO_ROOT)/tao/Priority_Mapping_Manager.i \
+ $(TAO_ROOT)/tao/TAOC.i \
+ $(TAO_ROOT)/tao/operation_details.h \
+ $(TAO_ROOT)/tao/target_specification.h \
+ $(TAO_ROOT)/tao/target_specification.i \
+ $(TAO_ROOT)/tao/operation_details.i \
+ $(TAO_ROOT)/tao/Invocation_Endpoint_Selectors.h \
+ $(TAO_ROOT)/tao/Invocation_Endpoint_Selectors.i \
+ $(TAO_ROOT)/tao/Invocation.i \
+ $(TAO_ROOT)/tao/ObjectIDList.h \
+ $(TAO_ROOT)/tao/ObjectIDList.i \
+ $(TAO_ROOT)/tao/DomainC.h \
+ $(TAO_ROOT)/tao/ClientRequestInfo.h \
+ $(TAO_ROOT)/tao/StringSeqC.h \
+ $(TAO_ROOT)/tao/StringSeqC.i \
+ $(TAO_ROOT)/tao/ClientRequestInfo.inl \
+ $(TAO_ROOT)/tao/DomainC.i \
+ $(TAO_ROOT)/tao/WrongTransactionC.h \
+ $(TAO_ROOT)/tao/BoundsC.h \
+ $(TAO_ROOT)/tao/BoundsC.i \
+ $(TAO_ROOT)/tao/PortableInterceptor.h \
+ $(TAO_ROOT)/tao/PortableInterceptor.i \
+ $(TAO_ROOT)/tao/BiDirPolicyC.h \
+ $(TAO_ROOT)/tao/BiDirPolicyC.i \
+ testC.i \
+ $(TAO_ROOT)/tao/PortableServer/PortableServer.h \
+ $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \
+ $(TAO_ROOT)/tao/PortableServer/RTPortableServerC.h \
+ $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \
+ $(TAO_ROOT)/tao/PortableServer/PortableServerC.i \
+ $(TAO_ROOT)/tao/PortableServer/RTPortableServerC.i \
+ $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \
+ $(TAO_ROOT)/tao/PortableServer/Servant_Base.i \
+ $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \
+ $(TAO_ROOT)/tao/PortableServer/Collocated_Object.i \
+ $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/PortableServer/ServerRequestInfo.h \
+ $(TAO_ROOT)/tao/PortableServer/ServerRequestInfo.inl \
+ testS_T.h testS_T.i testS_T.cpp testS.i \
+ $(TAO_ROOT)/tao/PortableServer/Object_Adapter.h \
+ $(TAO_ROOT)/tao/PortableServer/Key_Adapters.h \
+ $(ACE_ROOT)/ace/Map.h \
+ $(ACE_ROOT)/ace/Map_T.h \
+ $(ACE_ROOT)/ace/Pair.h \
+ $(ACE_ROOT)/ace/Pair_T.h \
+ $(ACE_ROOT)/ace/Pair_T.i \
+ $(ACE_ROOT)/ace/Pair_T.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/PortableServer/Key_Adapters.i \
+ $(TAO_ROOT)/tao/PortableServer/poa_macros.h \
+ $(TAO_ROOT)/tao/PortableServer/Active_Object_Map.h \
+ $(TAO_ROOT)/tao/PortableServer/Active_Object_Map.i \
+ $(TAO_ROOT)/tao/PortableServer/Object_Adapter.i \
+ $(TAO_ROOT)/tao/PortableServer/Operation_Table.h \
+ $(TAO_ROOT)/tao/RequestInfo_Util.h
+
+.obj/Single_Threaded_POA.o .obj/Single_Threaded_POA.so .shobj/Single_Threaded_POA.o .shobj/Single_Threaded_POA.so: Single_Threaded_POA.cpp testS.h testC.h \
+ $(TAO_ROOT)/tao/corba.h \
+ $(ACE_ROOT)/ace/pre.h \
+ $(ACE_ROOT)/ace/post.h \
+ $(ACE_ROOT)/ace/ACE_export.h \
+ $(ACE_ROOT)/ace/svc_export.h \
+ $(ACE_ROOT)/ace/ace_wchar.h \
+ $(ACE_ROOT)/ace/ace_wchar.inl \
+ $(ACE_ROOT)/ace/OS_Errno.h \
+ $(ACE_ROOT)/ace/OS_Export.h \
+ $(ACE_ROOT)/ace/OS_Errno.inl \
+ $(TAO_ROOT)/tao/corbafwd.h \
+ $(ACE_ROOT)/ace/CDR_Base.h \
+ $(ACE_ROOT)/ace/Basic_Types.h \
+ $(ACE_ROOT)/ace/Basic_Types.i \
+ $(ACE_ROOT)/ace/Message_Block.h \
+ $(ACE_ROOT)/ace/ACE.h \
+ $(ACE_ROOT)/ace/OS.h \
+ $(ACE_ROOT)/ace/OS_Dirent.h \
+ $(ACE_ROOT)/ace/OS_Dirent.inl \
+ $(ACE_ROOT)/ace/OS_String.h \
+ $(ACE_ROOT)/ace/OS_String.inl \
+ $(ACE_ROOT)/ace/OS_Memory.h \
+ $(ACE_ROOT)/ace/OS_Memory.inl \
+ $(ACE_ROOT)/ace/OS_TLI.h \
+ $(ACE_ROOT)/ace/OS_TLI.inl \
+ $(ACE_ROOT)/ace/Min_Max.h \
+ $(ACE_ROOT)/ace/streams.h \
+ $(ACE_ROOT)/ace/Trace.h \
+ $(ACE_ROOT)/ace/OS.i \
+ $(ACE_ROOT)/ace/Flag_Manip.h \
+ $(ACE_ROOT)/ace/Flag_Manip.i \
+ $(ACE_ROOT)/ace/Handle_Ops.h \
+ $(ACE_ROOT)/ace/Handle_Ops.i \
+ $(ACE_ROOT)/ace/Lib_Find.h \
+ $(ACE_ROOT)/ace/Lib_Find.i \
+ $(ACE_ROOT)/ace/Init_ACE.h \
+ $(ACE_ROOT)/ace/Init_ACE.i \
+ $(ACE_ROOT)/ace/Sock_Connect.h \
+ $(ACE_ROOT)/ace/Sock_Connect.i \
+ $(ACE_ROOT)/ace/ACE.i \
+ $(ACE_ROOT)/ace/Malloc.h \
+ $(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/OS_Log_Msg_Attributes.h \
+ $(ACE_ROOT)/ace/OS_Log_Msg_Attributes.inl \
+ $(ACE_ROOT)/ace/Malloc.i \
+ $(ACE_ROOT)/ace/Malloc_T.h \
+ $(ACE_ROOT)/ace/Synch.h \
+ $(ACE_ROOT)/ace/Synch.i \
+ $(ACE_ROOT)/ace/Synch_T.h \
+ $(ACE_ROOT)/ace/Synch_T.i \
+ $(ACE_ROOT)/ace/Thread.h \
+ $(ACE_ROOT)/ace/Thread_Adapter.h \
+ $(ACE_ROOT)/ace/Base_Thread_Adapter.h \
+ $(ACE_ROOT)/ace/Base_Thread_Adapter.inl \
+ $(ACE_ROOT)/ace/Thread_Adapter.inl \
+ $(ACE_ROOT)/ace/Thread.i \
+ $(ACE_ROOT)/ace/Atomic_Op.i \
+ $(ACE_ROOT)/ace/Synch_T.cpp \
+ $(ACE_ROOT)/ace/Malloc_Allocator.h \
+ $(ACE_ROOT)/ace/Malloc_Base.h \
+ $(ACE_ROOT)/ace/Malloc_Allocator.i \
+ $(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/Event_Handler.h \
+ $(ACE_ROOT)/ace/Event_Handler.i \
+ $(ACE_ROOT)/ace/Signal.h \
+ $(ACE_ROOT)/ace/Containers.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/Signal.i \
+ $(ACE_ROOT)/ace/Mem_Map.h \
+ $(ACE_ROOT)/ace/Mem_Map.i \
+ $(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/Memory_Pool.i \
+ $(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/CDR_Base.inl \
+ $(TAO_ROOT)/tao/try_macros.h \
+ $(TAO_ROOT)/tao/orbconf.h \
+ $(ACE_ROOT)/ace/CORBA_macros.h \
+ $(TAO_ROOT)/tao/varbase.h \
+ $(TAO_ROOT)/tao/TAO_Export.h \
+ $(TAO_ROOT)/tao/corbafwd.i \
+ $(TAO_ROOT)/tao/Environment.h \
+ $(TAO_ROOT)/tao/Environment.i \
+ $(TAO_ROOT)/tao/ORB.h \
+ $(TAO_ROOT)/tao/Exception.h \
+ $(ACE_ROOT)/ace/SString.h \
+ $(ACE_ROOT)/ace/SString.i \
+ $(TAO_ROOT)/tao/Exception.i \
+ $(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/Services.i \
+ $(TAO_ROOT)/tao/CORBA_String.h \
+ $(TAO_ROOT)/tao/CORBA_String.inl \
+ $(TAO_ROOT)/tao/PolicyC.h \
+ $(TAO_ROOT)/tao/CurrentC.h \
+ $(TAO_ROOT)/tao/Object.h \
+ $(TAO_ROOT)/tao/Abstract_Servant_Base.h \
+ $(TAO_ROOT)/tao/Object_Proxy_Broker.h \
+ $(TAO_ROOT)/tao/Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/Object.i \
+ $(TAO_ROOT)/tao/CurrentC.i \
+ $(TAO_ROOT)/tao/Encodable.h \
+ $(TAO_ROOT)/tao/CDR.h \
+ $(ACE_ROOT)/ace/CDR_Stream.h \
+ $(ACE_ROOT)/ace/CDR_Stream.i \
+ $(TAO_ROOT)/tao/CDR.i \
+ $(TAO_ROOT)/tao/Typecode.h \
+ $(TAO_ROOT)/tao/Typecode.i \
+ $(TAO_ROOT)/tao/PolicyC.i \
+ $(TAO_ROOT)/tao/ORB.i \
+ $(TAO_ROOT)/tao/Any.h \
+ $(TAO_ROOT)/tao/Any.i \
+ $(TAO_ROOT)/tao/NVList.h \
+ $(TAO_ROOT)/tao/NVList.i \
+ $(TAO_ROOT)/tao/Principal.h \
+ $(TAO_ROOT)/tao/OctetSeqC.h \
+ $(TAO_ROOT)/tao/OctetSeqC.i \
+ $(TAO_ROOT)/tao/Principal.i \
+ $(TAO_ROOT)/tao/TAO_Server_Request.h \
+ $(TAO_ROOT)/tao/Tagged_Profile.h \
+ $(TAO_ROOT)/tao/IOPC.h \
+ $(TAO_ROOT)/tao/IOPC.i \
+ $(TAO_ROOT)/tao/GIOPC.h \
+ $(TAO_ROOT)/tao/Object_KeyC.h \
+ $(TAO_ROOT)/tao/Object_KeyC.i \
+ $(TAO_ROOT)/tao/GIOPC.i \
+ $(TAO_ROOT)/tao/Tagged_Profile.i \
+ $(TAO_ROOT)/tao/Service_Context.h \
+ $(TAO_ROOT)/tao/Service_Context.inl \
+ $(TAO_ROOT)/tao/TAO_Server_Request.i \
+ $(TAO_ROOT)/tao/Remote_Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/LocalObject.h \
+ $(TAO_ROOT)/tao/LocalObject.i \
+ $(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/GIOP_Message_State.h \
+ $(TAO_ROOT)/tao/GIOP_Message_State.i \
+ $(TAO_ROOT)/tao/Profile.i \
+ $(TAO_ROOT)/tao/MProfile.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 \
+ $(ACE_ROOT)/ace/Service_Object.h \
+ $(ACE_ROOT)/ace/Shared_Object.h \
+ $(ACE_ROOT)/ace/Shared_Object.i \
+ $(ACE_ROOT)/ace/Service_Object.i \
+ $(TAO_ROOT)/tao/Protocol_Factory.h \
+ $(TAO_ROOT)/tao/params.h \
+ $(TAO_ROOT)/tao/params.i \
+ $(TAO_ROOT)/tao/TAO_Singleton_Manager.h \
+ $(TAO_ROOT)/tao/TAO_Singleton_Manager.inl \
+ $(TAO_ROOT)/tao/TAO_Singleton.h \
+ $(TAO_ROOT)/tao/TAO_Singleton.inl \
+ $(TAO_ROOT)/tao/TAO_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 \
+ $(TAO_ROOT)/tao/Adapter.h \
+ $(TAO_ROOT)/tao/Adapter.i \
+ $(TAO_ROOT)/tao/PolicyFactory_Registry.h \
+ $(TAO_ROOT)/tao/PortableInterceptorC.h \
+ $(TAO_ROOT)/tao/DynamicC.h \
+ $(TAO_ROOT)/tao/DynamicC.i \
+ $(TAO_ROOT)/tao/MessagingC.h \
+ $(TAO_ROOT)/tao/ValueBase.h \
+ $(TAO_ROOT)/tao/ValueBase.i \
+ $(TAO_ROOT)/tao/ValueFactory.h \
+ $(TAO_ROOT)/tao/ValueFactory.i \
+ $(TAO_ROOT)/tao/TimeBaseC.h \
+ $(TAO_ROOT)/tao/TimeBaseC.i \
+ $(TAO_ROOT)/tao/PollableC.h \
+ $(TAO_ROOT)/tao/PollableC.i \
+ $(TAO_ROOT)/tao/MessagingC.i \
+ $(TAO_ROOT)/tao/PortableInterceptorC.i \
+ $(ACE_ROOT)/ace/Map_Manager.h \
+ $(ACE_ROOT)/ace/Map_Manager.i \
+ $(ACE_ROOT)/ace/Map_Manager.cpp \
+ $(ACE_ROOT)/ace/Service_Config.h \
+ $(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/Test_and_Set.h \
+ $(ACE_ROOT)/ace/Test_and_Set.i \
+ $(ACE_ROOT)/ace/Test_and_Set.cpp \
+ $(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 \
+ $(TAO_ROOT)/tao/Parser_Registry.h \
+ $(TAO_ROOT)/tao/Parser_Registry.i \
+ $(TAO_ROOT)/tao/Service_Callbacks.h \
+ $(TAO_ROOT)/tao/Service_Callbacks.i \
+ $(TAO_ROOT)/tao/Fault_Tolerance_Service.h \
+ $(TAO_ROOT)/tao/Fault_Tolerance_Service.i \
+ $(TAO_ROOT)/tao/Connection_Cache_Manager.h \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.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_T.i \
+ $(ACE_ROOT)/ace/Hash_Map_Manager_T.cpp \
+ $(TAO_ROOT)/tao/Cache_Entries.h \
+ $(TAO_ROOT)/tao/Connection_Descriptor_Interface.h \
+ $(TAO_ROOT)/tao/Endpoint.h \
+ $(TAO_ROOT)/tao/Endpoint.i \
+ $(TAO_ROOT)/tao/Connection_Descriptor_Interface.inl \
+ $(TAO_ROOT)/tao/Cache_Entries.inl \
+ $(TAO_ROOT)/tao/Connection_Cache_Manager.inl \
+ $(TAO_ROOT)/tao/Cleanup_Func_Registry.h \
+ $(TAO_ROOT)/tao/Cleanup_Func_Registry.inl \
+ $(TAO_ROOT)/tao/Object_Ref_Table.h \
+ $(TAO_ROOT)/tao/Interceptor_List.h \
+ $(TAO_ROOT)/tao/Interceptor_List.inl \
+ $(TAO_ROOT)/tao/RT_Policy_i.h \
+ $(TAO_ROOT)/tao/RTCORBAS.h \
+ $(TAO_ROOT)/tao/IOPS.h \
+ $(TAO_ROOT)/tao/IOPS_T.h \
+ $(TAO_ROOT)/tao/IOPS_T.i \
+ $(TAO_ROOT)/tao/IOPS_T.cpp \
+ $(TAO_ROOT)/tao/IOPS.i \
+ $(TAO_ROOT)/tao/TimeBaseS.h \
+ $(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)/tao/RTCORBAC.h \
+ $(TAO_ROOT)/tao/RTCORBAC.i \
+ $(TAO_ROOT)/tao/RTCORBAS_T.h \
+ $(TAO_ROOT)/tao/RTCORBAS_T.i \
+ $(TAO_ROOT)/tao/RTCORBAS_T.cpp \
+ $(TAO_ROOT)/tao/RTCORBAS.i \
+ $(TAO_ROOT)/tao/RT_Policy_i.i \
+ $(TAO_ROOT)/tao/Protocols_Hooks.h \
+ $(ACE_ROOT)/ace/Hash_Map_Manager.h \
+ $(ACE_ROOT)/ace/Thread_Manager.h \
+ $(ACE_ROOT)/ace/Singleton.h \
+ $(ACE_ROOT)/ace/Singleton.i \
+ $(ACE_ROOT)/ace/Singleton.cpp \
+ $(ACE_ROOT)/ace/Thread_Manager.i \
+ $(TAO_ROOT)/tao/ORB_Core.i \
+ $(TAO_ROOT)/tao/Stub.i \
+ $(TAO_ROOT)/tao/debug.h \
+ $(TAO_ROOT)/tao/Client_Strategy_Factory.h \
+ $(TAO_ROOT)/tao/Server_Strategy_Factory.h \
+ $(TAO_ROOT)/tao/Invocation.h \
+ $(TAO_ROOT)/tao/Synch_Reply_Dispatcher.h \
+ $(TAO_ROOT)/tao/Reply_Dispatcher.h \
+ $(TAO_ROOT)/tao/Reply_Dispatcher.i \
+ $(TAO_ROOT)/tao/TAOC.h \
+ $(TAO_ROOT)/tao/Priority_Mapping_Manager.h \
+ $(TAO_ROOT)/tao/Priority_Mapping.h \
+ $(TAO_ROOT)/tao/Priority_Mapping.i \
+ $(TAO_ROOT)/tao/Priority_Mapping_Manager.i \
+ $(TAO_ROOT)/tao/TAOC.i \
+ $(TAO_ROOT)/tao/operation_details.h \
+ $(TAO_ROOT)/tao/target_specification.h \
+ $(TAO_ROOT)/tao/target_specification.i \
+ $(TAO_ROOT)/tao/operation_details.i \
+ $(TAO_ROOT)/tao/Invocation_Endpoint_Selectors.h \
+ $(TAO_ROOT)/tao/Invocation_Endpoint_Selectors.i \
+ $(TAO_ROOT)/tao/Invocation.i \
+ $(TAO_ROOT)/tao/ObjectIDList.h \
+ $(TAO_ROOT)/tao/ObjectIDList.i \
+ $(TAO_ROOT)/tao/DomainC.h \
+ $(TAO_ROOT)/tao/ClientRequestInfo.h \
+ $(TAO_ROOT)/tao/StringSeqC.h \
+ $(TAO_ROOT)/tao/StringSeqC.i \
+ $(TAO_ROOT)/tao/ClientRequestInfo.inl \
+ $(TAO_ROOT)/tao/DomainC.i \
+ $(TAO_ROOT)/tao/WrongTransactionC.h \
+ $(TAO_ROOT)/tao/BoundsC.h \
+ $(TAO_ROOT)/tao/BoundsC.i \
+ $(TAO_ROOT)/tao/PortableInterceptor.h \
+ $(TAO_ROOT)/tao/PortableInterceptor.i \
+ $(TAO_ROOT)/tao/BiDirPolicyC.h \
+ $(TAO_ROOT)/tao/BiDirPolicyC.i \
+ testC.i \
+ $(TAO_ROOT)/tao/PortableServer/PortableServer.h \
+ $(TAO_ROOT)/tao/PortableServer/portableserver_export.h \
+ $(TAO_ROOT)/tao/PortableServer/RTPortableServerC.h \
+ $(TAO_ROOT)/tao/PortableServer/PortableServerC.h \
+ $(TAO_ROOT)/tao/PortableServer/PortableServerC.i \
+ $(TAO_ROOT)/tao/PortableServer/RTPortableServerC.i \
+ $(TAO_ROOT)/tao/PortableServer/Servant_Base.h \
+ $(TAO_ROOT)/tao/PortableServer/Servant_Base.i \
+ $(TAO_ROOT)/tao/PortableServer/Collocated_Object.h \
+ $(TAO_ROOT)/tao/PortableServer/Collocated_Object.i \
+ $(TAO_ROOT)/tao/PortableServer/ThruPOA_Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/PortableServer/Direct_Object_Proxy_Impl.h \
+ $(TAO_ROOT)/tao/PortableServer/ServerRequestInfo.h \
+ $(TAO_ROOT)/tao/PortableServer/ServerRequestInfo.inl \
+ testS_T.h testS_T.i testS_T.cpp testS.i
+
+# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.cpp b/TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.cpp
new file mode 100644
index 00000000000..39d3f57d825
--- /dev/null
+++ b/TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.cpp
@@ -0,0 +1,208 @@
+// $Id$
+
+//========================================================================
+//
+// = LIBRARY
+// TAO/tests/POA/Single_Threaded_POA
+//
+// = FILENAME
+// Single_Threaded_POA.cpp
+//
+// = DESCRIPTION
+// This program tests to make sure that two threads cannot call
+// servants in a single threaded POA simultaneously. At the same
+// time, it makes sure that a servant can call itself or other
+// servants in the same POA while in an upcall.
+//
+// = AUTHOR
+// Irfan Pyarali
+//
+//=========================================================================
+
+#include "testS.h"
+#include "ace/Task.h"
+
+class test_i : public virtual POA_test
+{
+public:
+ test_i (PortableServer::POA_ptr poa);
+
+ void method (CORBA::Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ PortableServer::POA_ptr _default_POA (CORBA_Environment &ACE_TRY_ENV);
+
+private:
+ PortableServer::POA_var poa_;
+ int called_self_;
+};
+
+test_i::test_i (PortableServer::POA_ptr poa)
+ : poa_ (PortableServer::POA::_duplicate (poa)),
+ called_self_ (0)
+{
+}
+
+void
+test_i::method (CORBA::Environment &ACE_TRY_ENV)
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ ACE_DEBUG ((LM_DEBUG,
+ "Entering Worker::svc from %t and sleeping....\n"));
+
+ ACE_OS::sleep (3);
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Done resting from %t\n"));
+
+ if (this->called_self_ == 0)
+ {
+ this->called_self_ = 1;
+
+ ACE_DEBUG ((LM_DEBUG,
+ "Calling self from %t\n"));
+
+ test_var self = this->_this (ACE_TRY_ENV);
+ ACE_CHECK;
+
+ self->method (ACE_TRY_ENV);
+ ACE_CHECK;
+ }
+}
+
+PortableServer::POA_ptr
+test_i::_default_POA (CORBA_Environment &ACE_TRY_ENV)
+{
+ return PortableServer::POA::_duplicate (this->poa_.in ());
+}
+
+class Worker : public ACE_Task_Base
+{
+public:
+ Worker (test_ptr t);
+ int svc (void);
+
+private:
+ test_var test_;
+};
+
+Worker::Worker (test_ptr t)
+ : test_ (test::_duplicate (t))
+{
+}
+
+int
+Worker::svc (void)
+{
+ ACE_TRY_NEW_ENV
+ {
+ this->test_->method (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught in thread");
+ return -1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
+
+int
+main (int argc, char **argv)
+{
+ ACE_TRY_NEW_ENV
+ {
+ // Initialize the ORB first.
+ CORBA::ORB_var orb = CORBA::ORB_init (argc,
+ argv,
+ 0,
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ // Obtain the RootPOA.
+ CORBA::Object_var obj = orb->resolve_initial_references ("RootPOA",
+ ACE_TRY_ENV);
+
+ // Get the POA_var object from Object_var.
+ PortableServer::POA_var root_poa =
+ PortableServer::POA::_narrow (obj.in (),
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ // Get the POAManager of the RootPOA.
+ PortableServer::POAManager_var poa_manager =
+ root_poa->the_POAManager (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ // Policies for the new POA.
+ CORBA::PolicyList policies (2);
+ policies.length (2);
+
+ policies[0] =
+ root_poa->create_implicit_activation_policy (PortableServer::IMPLICIT_ACTIVATION,
+ ACE_TRY_ENV);
+ ACE_CHECK;
+
+ policies[1] =
+ root_poa->create_thread_policy (PortableServer::SINGLE_THREAD_MODEL,
+ ACE_TRY_ENV);
+ ACE_CHECK;
+
+ // Creation of the child POA.
+ PortableServer::POA_var child_poa =
+ root_poa->create_POA ("child",
+ poa_manager.in (),
+ policies,
+ ACE_TRY_ENV);
+ ACE_CHECK;
+
+ // Destroy the policies
+ for (CORBA::ULong i = 0;
+ i < policies.length ();
+ ++i)
+ {
+ policies[i]->destroy (ACE_TRY_ENV);
+ ACE_CHECK;
+ }
+
+ poa_manager->activate (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ test_i servant1 (child_poa.in ());
+ test_i servant2 (child_poa.in ());
+
+ test_var object1 = servant1._this (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ test_var object2 = servant2._this (ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ Worker worker1 (object1.in ());
+ Worker worker2 (object2.in ());
+
+ int result = 0;
+
+ result =
+ worker1.activate (THR_BOUND) != 0 ||
+ worker2.activate (THR_BOUND) != 0;
+ ACE_ASSERT (result == 0);
+
+ result = ACE_Thread_Manager::instance ()->wait ();
+ ACE_ASSERT (result == 0);
+
+ root_poa->destroy (1,
+ 1,
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, "Exception caught");
+ return -1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}
diff --git a/TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.dsp b/TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.dsp
new file mode 100644
index 00000000000..8d2fea8dc42
--- /dev/null
+++ b/TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.dsp
@@ -0,0 +1,203 @@
+# Microsoft Developer Studio Project File - Name="POA Single_Threaded_POA" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=POA Single_Threaded_POA - 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 "Single_Threaded_POA.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 "Single_Threaded_POA.mak" CFG="POA Single_Threaded_POA - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "POA Single_Threaded_POA - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "POA Single_Threaded_POA - 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)" == "POA Single_Threaded_POA - 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 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 ace.lib TAO.lib TAO_PortableServer.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\tao\PortableServer" /libpath:"..\..\..\tao" /libpath:"..\..\..\..\ace"
+
+!ELSEIF "$(CFG)" == "POA Single_Threaded_POA - 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 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 aced.lib TAOd.lib TAO_PortableServerd.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\tao\PortableServer" /libpath:"..\..\..\tao" /libpath:"..\..\..\..\ace"
+
+!ENDIF
+
+# Begin Target
+
+# Name "POA Single_Threaded_POA - Win32 Release"
+# Name "POA Single_Threaded_POA - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Single_Threaded_POA.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\testC.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\testS.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\testC.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\testS.h
+# End Source File
+# End Group
+# Begin Group "IDL Files"
+
+# PROP Default_Filter "idl"
+# Begin Source File
+
+SOURCE=.\test.idl
+
+!IF "$(CFG)" == "POA Single_Threaded_POA - Win32 Release"
+
+USERDEP__TEST_="..\..\..\..\bin\Release\tao_idl.exe"
+# Begin Custom Build - Invoking TAO's IDL Compiler on $(InputPath)
+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)" == "POA Single_Threaded_POA - Win32 Debug"
+
+USERDEP__TEST_="..\..\..\..\bin\tao_idl.exe"
+# Begin Custom Build - Invoking TAO's IDL Compiler on $(InputPath)
+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
+# End Target
+# End Project
diff --git a/TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.dsw b/TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.dsw
new file mode 100644
index 00000000000..d3787c2ada2
--- /dev/null
+++ b/TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.dsw
@@ -0,0 +1,28 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Single_Threaded_POA"=.\Single_Threaded_POA.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
diff --git a/TAO/tests/POA/Single_Threaded_POA/makefile.bor b/TAO/tests/POA/Single_Threaded_POA/makefile.bor
new file mode 100644
index 00000000000..16b8b353f46
--- /dev/null
+++ b/TAO/tests/POA/Single_Threaded_POA/makefile.bor
@@ -0,0 +1,27 @@
+
+#
+# Makefile for building the POA Single_Threaded_POA test
+#
+
+NAME = Single_Threaded_POA
+
+OBJFILES = \
+ $(OBJDIR)\testC.obj \
+ $(OBJDIR)\testS.obj \
+ $(OBJDIR)\Single_Threaded_POA.obj
+
+IDLFILES = \
+ $(IDLDIR)\test.idl
+
+CPPDIR = .;..
+
+IDLDIR = .
+
+!include <$(ACE_ROOT)\include\makeinclude\build_example.bor>
+
+#
+# IDL Build rules
+#
+
+$(IDLDIR)\testC.cpp $(IDLDIR)\testS.cpp: $(IDLDIR)\test.idl
+ $(TAO_IDL) $**
diff --git a/TAO/tests/POA/Single_Threaded_POA/run_test.pl b/TAO/tests/POA/Single_Threaded_POA/run_test.pl
new file mode 100755
index 00000000000..ae475669032
--- /dev/null
+++ b/TAO/tests/POA/Single_Threaded_POA/run_test.pl
@@ -0,0 +1,27 @@
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
+ & eval 'exec perl -S $0 $argv:q'
+ if 0;
+
+# $Id$
+# -*- perl -*-
+
+unshift @INC, '../../../../bin';
+require Process;
+require ACEutils;
+use Cwd;
+
+ACE::checkForTarget(getcwd());
+
+$T = Process::Create ($EXEPREFIX."Single_Threaded_POA".$EXE_EXT);
+
+$client = $T->TimedWait (60);
+if ($client == -1) {
+ print STDERR "ERROR: test timedout\n";
+ $T->Kill (); $T->TimedWait (1);
+}
+
+if ($client == -1) {
+ exit 1;
+}
+
+exit 0;
diff --git a/TAO/tests/POA/Single_Threaded_POA/test.idl b/TAO/tests/POA/Single_Threaded_POA/test.idl
new file mode 100644
index 00000000000..dd1b063b9bf
--- /dev/null
+++ b/TAO/tests/POA/Single_Threaded_POA/test.idl
@@ -0,0 +1,6 @@
+// $Id$
+
+interface test
+{
+ void method ();
+};
diff --git a/TAO/tests/TAO_Tests.dsw b/TAO/tests/TAO_Tests.dsw
index 61502cadcb8..a177ee60f24 100644
--- a/TAO/tests/TAO_Tests.dsw
+++ b/TAO/tests/TAO_Tests.dsw
@@ -411,6 +411,18 @@ Package=<4>
###############################################################################
+Project: "POA Single Threaded POA"=.\POA\Single_Threaded_POA\Single_Threaded_POA.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
Project: "Param_Test Client"=.\Param_Test\client.dsp - Package Owner=<4>
Package=<5>
diff --git a/bin/auto_compile_win32.pl b/bin/auto_compile_win32.pl
index 2dee8871bfa..ca8f9f3a609 100755
--- a/bin/auto_compile_win32.pl
+++ b/bin/auto_compile_win32.pl
@@ -233,6 +233,7 @@ TAO/tests/MT_Client/MT_Client.dsw, MT_Client Client:
TAO/tests/MT_Server/MT_Server.dsw, MT_Server Server:
TAO/tests/MT_Server/MT_Server.dsw, MT_Server Client:
TAO/tests/POA/Destruction/Destruction.dsw, POA Destruction:
+TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.dsw, POA Single_Threaded_POA:
TAO/tests/POA/Non_Servant_Upcalls/Non_Servant_Upcalls.dsw, POA Non_Servant_Upcalls:
TAO/tests/POA/Deactivation/Deactivation.dsw, POA Deactivation:
TAO/tests/POA/Identity/Identity.dsw, POA Identity:
@@ -457,6 +458,7 @@ TAO/tests/MT_Client/MT_Client.dsw, MT_Client Client:
TAO/tests/MT_Server/MT_Server.dsw, MT_Server Server:
TAO/tests/MT_Server/MT_Server.dsw, MT_Server Client:
TAO/tests/POA/Destruction/Destruction.dsw, POA Destruction:
+TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.dsw, POA Single_Threaded_POA:
TAO/tests/POA/Non_Servant_Upcalls/Non_Servant_Upcalls.dsw, POA Non_Servant_Upcalls:
TAO/tests/POA/Deactivation/Deactivation.dsw, POA Deactivation:
TAO/tests/POA/Identity/Identity.dsw, POA Identity:
diff --git a/bin/auto_run_tests.lst b/bin/auto_run_tests.lst
index 877a146ac1b..ba3df7ba3e3 100644
--- a/bin/auto_run_tests.lst
+++ b/bin/auto_run_tests.lst
@@ -41,6 +41,7 @@ TAO/tests/Nested_Event_Loop/run_test.pl
TAO/tests/POA/Identity/run_test.pl
TAO/tests/POA/Deactivation/run_test.pl
TAO/tests/POA/Destruction/run_test.pl
+TAO/tests/POA/Single_Threaded_POA/run_test.pl
TAO/tests/POA/Non_Servant_Upcalls/run_test.pl
TAO/tests/POA/wait_for_completion/run_test.pl
TAO/tests/IORManipulation/run_test.pl