diff options
Diffstat (limited to 'TAO/tao/RTPortableServer/RT_POA.inl')
-rw-r--r-- | TAO/tao/RTPortableServer/RT_POA.inl | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/TAO/tao/RTPortableServer/RT_POA.inl b/TAO/tao/RTPortableServer/RT_POA.inl new file mode 100644 index 00000000000..4b771dd5661 --- /dev/null +++ b/TAO/tao/RTPortableServer/RT_POA.inl @@ -0,0 +1,109 @@ +// -*- C++ -*- +// +// $Id$ + +// Exception macros +#include "tao/PortableServer/poa_macros.h" +#include "tao/PortableServer/POA_Guard.h" + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_INLINE CORBA::Object_ptr +TAO_RT_POA::create_reference_with_priority (const char * intf, + RTCORBA::Priority priority) +{ + // Check that this method can be used based on this POA's policies. + this->validate_policies (); + + this->validate_priority (priority); + + // Lock access for the duration of this transaction. + TAO_POA_GUARD_RETURN (0); + + return this->create_reference_i (intf, priority); +} + +ACE_INLINE CORBA::Object_ptr +TAO_RT_POA::create_reference_with_id_and_priority (const PortableServer::ObjectId & oid, + const char * intf, + RTCORBA::Priority priority) +{ + // Check that this method can be used based on this POA's policies. + this->validate_policies (); + + this->validate_priority (priority); + + // Lock access for the duration of this transaction. + TAO_POA_GUARD_RETURN (0); + + return this->create_reference_with_id_i (oid, intf, priority); +} + +ACE_INLINE PortableServer::ObjectId * +TAO_RT_POA::activate_object_with_priority (PortableServer::Servant servant, + RTCORBA::Priority priority) +{ + // Check that this method can be used based on this POA's policies. + this->validate_policies (); + + this->validate_priority (priority); + + while (true) + { + bool wait_occurred_restart_call = false; + + // Lock access for the duration of this transaction. + TAO_POA_GUARD_RETURN (0); + + PortableServer::ObjectId *result = + this->activate_object_i (servant, priority, wait_occurred_restart_call); + + // If we ended up waiting on a condition variable, the POA state + // may have changed while we are waiting. Therefore, we need to + // restart this call. + if (wait_occurred_restart_call) + continue; + else + return result; + } +} + +ACE_INLINE void +TAO_RT_POA::activate_object_with_id_and_priority (const PortableServer::ObjectId & oid, + PortableServer::Servant servant, + RTCORBA::Priority priority) +{ + // Check that this method can be used based on this POA's policies. + this->validate_policies (); + + this->validate_priority (priority); + + while (true) + { + bool wait_occurred_restart_call = false; + + // Lock access for the duration of this transaction. + TAO_POA_GUARD; + + this->activate_object_with_id_i (oid, + servant, + priority, + wait_occurred_restart_call); + + // If we ended up waiting on a condition variable, the POA state + // may have changed while we are waiting. Therefore, we need to + // restart this call. + if (wait_occurred_restart_call) + continue; + else + return; + } +} + +ACE_INLINE void * +TAO_RT_POA::thread_pool (void) const +{ + return this->thread_pool_; +} + +TAO_END_VERSIONED_NAMESPACE_DECL |