summaryrefslogtreecommitdiff
path: root/TAO/tao/POA.cpp
diff options
context:
space:
mode:
authorirfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-06-08 23:46:15 +0000
committerirfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1999-06-08 23:46:15 +0000
commit6046d7736ee24e64b9ccbab3b1b6460ed6455194 (patch)
tree2f11dc99ec83fc8c147d954990c46edd5723d20b /TAO/tao/POA.cpp
parent5de2810d4373e5388e821c2f3ec75d69fd670a9a (diff)
downloadATCD-6046d7736ee24e64b9ccbab3b1b6460ed6455194.tar.gz
Tue Jun 08 18:17:38 1999 Irfan Pyarali <irfan@cs.wustl.edu>
Diffstat (limited to 'TAO/tao/POA.cpp')
-rw-r--r--TAO/tao/POA.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/TAO/tao/POA.cpp b/TAO/tao/POA.cpp
index 605d225a281..79925667d4b 100644
--- a/TAO/tao/POA.cpp
+++ b/TAO/tao/POA.cpp
@@ -280,6 +280,17 @@ TAO_POA::find_POA (const char *adapter_name,
// Lock access for the duration of this transaction.
TAO_POA_GUARD_RETURN (ACE_Lock, monitor, this->lock (), 0, ACE_TRY_ENV);
+ // A recursive thread lock without using a recursive thread
+ // lock. Non_Servant_Upcall has a magic constructor and
+ // destructor. We unlock the Object_Adapter lock for the
+ // duration of the servant activator upcalls; reacquiring
+ // once the upcalls complete. Even though we are releasing
+ // the lock, other threads will not be able to make progress
+ // since <Object_Adapter::non_servant_upcall_in_progress_>
+ // has been set.
+ TAO_Object_Adapter::Non_Servant_Upcall non_servant_upcall (*this->orb_core_.object_adapter ());
+ ACE_UNUSED_ARG (non_servant_upcall);
+
TAO_POA *child = this->find_POA_i (adapter_name,
activate_it,
ACE_TRY_ENV);