diff options
Diffstat (limited to 'TAO/tao/Transport_Cache_Manager.inl')
-rw-r--r-- | TAO/tao/Transport_Cache_Manager.inl | 69 |
1 files changed, 45 insertions, 24 deletions
diff --git a/TAO/tao/Transport_Cache_Manager.inl b/TAO/tao/Transport_Cache_Manager.inl index ed53a1a4f90..a2da6bb5568 100644 --- a/TAO/tao/Transport_Cache_Manager.inl +++ b/TAO/tao/Transport_Cache_Manager.inl @@ -23,7 +23,8 @@ namespace TAO ACE_INLINE int Transport_Cache_Manager::cache_transport ( TAO_Transport_Descriptor_Interface *prop, - TAO_Transport *transport) + TAO_Transport *transport, + Cache_Entries_State state/* = ENTRY_IDLE_BUT_NOT_PURGABLE*/) { // Compose the ExternId & Intid Cache_ExtId ext_id (prop); @@ -37,7 +38,7 @@ namespace TAO -1)); // Do as the semantics of this method dictates - int_id.recycle_state (ENTRY_BUSY); + int_id.recycle_state (state); retval = this->bind_i (ext_id, int_id); @@ -51,30 +52,12 @@ namespace TAO TAO_Transport_Descriptor_Interface *prop, TAO_Transport *transport) { - // Compose the ExternId & Intid - Cache_ExtId ext_id (prop); - Cache_IntId int_id (transport); - - int retval = 0; - { - ACE_MT (ACE_GUARD_RETURN (ACE_Lock, - guard, - *this->cache_lock_, - -1)); - - // Do as the semantics of this method dictates - int_id.recycle_state (ENTRY_IDLE_AND_PURGABLE); - retval = this->bind_i (ext_id, - int_id); - } - - return retval; + return cache_transport(prop, transport, ENTRY_IDLE_AND_PURGABLE); } ACE_INLINE int Transport_Cache_Manager::purge_entry (HASH_MAP_ENTRY *&entry) { - // Double checked locking if(entry == 0) return 0; @@ -84,19 +67,30 @@ namespace TAO } ACE_INLINE void - Transport_Cache_Manager::mark_invalid (HASH_MAP_ENTRY *&entry) + Transport_Cache_Manager::mark_invalid (HASH_MAP_ENTRY *entry) { if(entry == 0) return; - // Double checked locking ACE_MT (ACE_GUARD (ACE_Lock, guard, *this->cache_lock_)); this->mark_invalid_i (entry); } + ACE_INLINE void + Transport_Cache_Manager::mark_connected (HASH_MAP_ENTRY *entry, + bool state) + { + if(entry == 0) + return; + + ACE_MT (ACE_GUARD (ACE_Lock, guard, *this->cache_lock_)); + + entry->item().is_connected_ = state; + } + ACE_INLINE int - Transport_Cache_Manager::make_idle (HASH_MAP_ENTRY *&entry) + Transport_Cache_Manager::make_idle (HASH_MAP_ENTRY *entry) { if(entry == 0) return -1; @@ -105,6 +99,33 @@ namespace TAO return this->make_idle_i (entry); } + ACE_INLINE void + Transport_Cache_Manager::set_entry_state ( + HASH_MAP_ENTRY *entry, + TAO::Cache_Entries_State state) + { + if(entry != 0) + { + ACE_MT (ACE_GUARD (ACE_Lock, guard, *this->cache_lock_)); + entry->item ().recycle_state (state); + } + } + + ACE_INLINE Transport_Cache_Manager::Find_Result + Transport_Cache_Manager::find ( + TAO_Transport_Descriptor_Interface *prop, + TAO_Transport *&transport, + size_t &busy_count) + { + ACE_MT (ACE_GUARD_RETURN (ACE_Lock, + guard, + *this->cache_lock_, + Transport_Cache_Manager::CACHE_FOUND_NONE)); + + return this->find_i (prop, transport, busy_count); + } + + ACE_INLINE int Transport_Cache_Manager::close (Connection_Handler_Set &handlers) { |