summaryrefslogtreecommitdiff
path: root/TAO/tao/Transport_Cache_Manager.inl
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Transport_Cache_Manager.inl')
-rw-r--r--TAO/tao/Transport_Cache_Manager.inl69
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)
{