diff options
author | irfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-03-08 01:30:11 +0000 |
---|---|---|
committer | irfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-03-08 01:30:11 +0000 |
commit | 940c36afedea20a4fca68f1aceb930cdf0c72985 (patch) | |
tree | 0bf6842e73cfc35f9ad412fc4f62f39707df55c3 | |
parent | dcdd7ca068e55ebbfa9e0b78f333e5ebcad5d034 (diff) | |
download | ATCD-940c36afedea20a4fca68f1aceb930cdf0c72985.tar.gz |
ChangeLogTag: Wed Mar 07 19:19:18 2001 Irfan Pyarali <irfan@cs.wustl.edu>
-rw-r--r-- | TAO/ChangeLogs/ChangeLog-02a | 74 | ||||
-rw-r--r-- | TAO/tao/ORB_Core.cpp | 98 | ||||
-rw-r--r-- | TAO/tao/ORB_Core.h | 2 | ||||
-rw-r--r-- | TAO/tao/PortableServer/Object_Adapter.cpp | 34 | ||||
-rw-r--r-- | TAO/tao/PortableServer/POA.cpp | 55 | ||||
-rw-r--r-- | TAO/tao/PortableServer/POA.h | 6 | ||||
-rw-r--r-- | TAO/tao/PortableServer/POA.i | 26 | ||||
-rw-r--r-- | TAO/tao/PortableServer/Servant_Base.cpp | 42 | ||||
-rw-r--r-- | TAO/tao/PortableServer/Servant_Base.h | 41 | ||||
-rw-r--r-- | TAO/tests/POA/Makefile | 1 | ||||
-rw-r--r-- | TAO/tests/POA/README | 9 | ||||
-rw-r--r-- | TAO/tests/POA/Single_Threaded_POA/Makefile | 1062 | ||||
-rw-r--r-- | TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.cpp | 208 | ||||
-rw-r--r-- | TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.dsp | 203 | ||||
-rw-r--r-- | TAO/tests/POA/Single_Threaded_POA/Single_Threaded_POA.dsw | 28 | ||||
-rw-r--r-- | TAO/tests/POA/Single_Threaded_POA/makefile.bor | 27 | ||||
-rwxr-xr-x | TAO/tests/POA/Single_Threaded_POA/run_test.pl | 27 | ||||
-rw-r--r-- | TAO/tests/POA/Single_Threaded_POA/test.idl | 6 | ||||
-rw-r--r-- | TAO/tests/TAO_Tests.dsw | 12 | ||||
-rwxr-xr-x | bin/auto_compile_win32.pl | 2 | ||||
-rw-r--r-- | bin/auto_run_tests.lst | 1 |
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 |