summaryrefslogtreecommitdiff
path: root/TAO/tao/Connection_Cache_Manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Connection_Cache_Manager.cpp')
-rw-r--r--TAO/tao/Connection_Cache_Manager.cpp336
1 files changed, 0 insertions, 336 deletions
diff --git a/TAO/tao/Connection_Cache_Manager.cpp b/TAO/tao/Connection_Cache_Manager.cpp
deleted file mode 100644
index 0a2d9193680..00000000000
--- a/TAO/tao/Connection_Cache_Manager.cpp
+++ /dev/null
@@ -1,336 +0,0 @@
-#include "tao/Connection_Cache_Manager.h"
-#include "tao/Connection_Handler.h"
-#include "tao/debug.h"
-#include "tao/ORB_Core.h"
-#include "tao/Resource_Factory.h"
-
-#if !defined (__ACE_INLINE__)
-# include "tao/Connection_Cache_Manager.inl"
-#endif /* __ACE_INLINE__ */
-
-
-ACE_RCSID(tao, Connection_Cache_Hash_Manager, "$Id$")
-
-
-TAO_Connection_Cache_Manager::
- TAO_Connection_Cache_Manager (void)
- : cache_map_ (),
- cache_lock_ (0)
-{
-
-}
-
-TAO_Connection_Cache_Manager::~TAO_Connection_Cache_Manager (void)
-{
- // Delete the lock that we have
- delete this->cache_lock_;
-}
-
-int
-TAO_Connection_Cache_Manager::open (TAO_ORB_Core *orb_core,
- size_t size)
-{
- // Create the cache_lock
- this->cache_lock_ =
- orb_core->resource_factory ()->create_cached_connection_lock ();
-
- if (this->cache_lock_ == 0)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_TEXT ("TAO (%P|%t) ERROR TAO_Connection_Cache_Manager::open "),
- ACE_TEXT ("Lock creation error \n")),
- -1);
- }
-
- // Now open the cache map
- return this->cache_map_.open (size);
-}
-
-int
-TAO_Connection_Cache_Manager::bind_i (TAO_Cache_ExtId &ext_id,
- TAO_Cache_IntId &int_id)
-{
- // Get the entry too
- HASH_MAP_ENTRY *entry = 0;
- int retval = this->cache_map_.bind (ext_id,
- int_id,
- entry);
- if (retval == 0)
- {
- // The entry has been added to cache succesfully
- // Add the cache_map_entry to the handler
- int_id.handler () ->cache_map_entry (entry);
- }
- else if (retval == 1)
- {
- if (TAO_debug_level > 0 && retval != 0)
- {
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%P|%t) TAO_Connection_Cache_Manager::bind_i")
- ACE_TEXT (" unable to bind in the first attempt")
- ACE_TEXT (" so trying with a new index \n")));
- }
-
- // There was an entry like this before, so let us do some
- // minor adjustments
- retval = this->get_last_index_bind (ext_id,
- int_id,
- entry);
- if (retval == 0)
- int_id.handler ()->cache_map_entry (entry);
- }
-
- if (TAO_debug_level > 0 && retval != 0)
- {
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%P|%t) TAO_Connection_Cache_Manager::bind_i")
- ACE_TEXT (" unable to bind \n")));
- }
-
- return retval;
-}
-
-
-int
-TAO_Connection_Cache_Manager::find_i (const TAO_Cache_ExtId &key,
- TAO_Cache_IntId &value)
-{
- HASH_MAP_ENTRY *entry = 0;
-
- // Get the entry from the Hash Map
- int retval = this->cache_map_.find (key,
- entry);
- if (retval == 0)
- {
- retval = this->get_idle_handler (key,
- entry);
-
- // We have a succesful entry
- if (entry)
- {
- value = entry->int_id_;
- }
-
- if (TAO_debug_level > 0 && retval != 0)
- {
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%P|%t) TAO_Connection_Cache_Manager::find_i")
- ACE_TEXT (" unable to locate a free connection \n")));
- }
- }
-
-
- return retval;
-}
-
-int
-TAO_Connection_Cache_Manager::rebind_i (const TAO_Cache_ExtId &key,
- const TAO_Cache_IntId &value)
-{
- return this->cache_map_.rebind (key,
- value);
-}
-
-int
-TAO_Connection_Cache_Manager::trybind_i (const TAO_Cache_ExtId &key,
- TAO_Cache_IntId &value)
-{
- return this->cache_map_.trybind (key, value);
-}
-
-int
-TAO_Connection_Cache_Manager::unbind_i (const TAO_Cache_ExtId &key)
-{
- return this->cache_map_.unbind (key);
-}
-
-int
-TAO_Connection_Cache_Manager::unbind_i (const TAO_Cache_ExtId &key,
- TAO_Cache_IntId &value)
-{
- return this->cache_map_.unbind (key,
- value);
-}
-
-int
-TAO_Connection_Cache_Manager::make_idle_i (HASH_MAP_ENTRY *&entry)
-{
-
- // First get the entry again (if at all things had changed in the
- // cache map in the mean time)
- HASH_MAP_ENTRY *new_entry = 0;
- int retval = this->cache_map_.find (entry->ext_id_,
- new_entry);
- if (retval == 0)
- {
- new_entry->int_id_.
- recycle_state (ACE_RECYCLABLE_IDLE_AND_PURGABLE);
-
- entry = new_entry;
- }
- else if (TAO_debug_level > 0 && retval != 0)
- {
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%P|%t) TAO_Connection_Cache_Manager::make_idle_i")
- ACE_TEXT ("unable to locate the entry to make it idle \n")));
- }
-
- return retval;
-}
-
-int
-TAO_Connection_Cache_Manager::mark_closed_i (HASH_MAP_ENTRY *&entry)
-{
- // First get the entry again (if at all things had changed in the
- // cache map in the mean time)
- HASH_MAP_ENTRY *new_entry = 0;
-
- int retval = this->cache_map_.find (entry->ext_id_,
- new_entry);
- if (retval == 0)
- {
- new_entry->int_id_.
- recycle_state (ACE_RECYCLABLE_CLOSED);
-
- entry = new_entry;
- }
- else if (TAO_debug_level > 0 && retval != 0)
- {
- ACE_ERROR ((LM_ERROR,
- ACE_TEXT ("(%P|%t) TAO_Connection_Cache_Manager::make_idle_i")
- ACE_TEXT ("unable to locate the entry to mark it as closed \n")));
- }
-
- return retval;
-}
-
-int
-TAO_Connection_Cache_Manager::close_i (ACE_Handle_Set &handle_set)
-{
-
-
- for (HASH_MAP_ITER iter = this->cache_map_.begin ();
- iter != this->cache_map_.end ();
- iter ++)
- {
-
- // Should I look for IDLE & PURGABLE ones to remove? That would
- // sound odd as we would be called at ORB destruction time. So,
- // we should just go ahead and remove the entries from the map
-
- // As a first step, check whether the handler has been
- // registered with the reactor. If registered, then get the
- // handle and set that in the <handle_set> so that the ORB_Core
- // would deregister them from the reactor before shutdown.
- if ((*iter).int_id_.handler ()->is_registered ())
- {
- handle_set.set_bit ((*iter).int_id_.handler ()->fetch_handle ());
- }
-
- // Then decrement the reference count on the handler
- (*iter).int_id_.handler ()->decr_ref_count ();
-
- // Then remove the entry from the map
- // @@ When I get the purging ready, I should call purge () from
- // here.
- HASH_MAP_ENTRY &entry = (*iter);
-
- this->cache_map_.unbind (&entry);
- }
-
- return 0;
-}
-
-int
-TAO_Connection_Cache_Manager::
- get_last_index_bind (TAO_Cache_ExtId &key,
- TAO_Cache_IntId &val,
- HASH_MAP_ENTRY *&entry)
-{
- CORBA::ULong ctr = entry->ext_id_.index ();
-
- // Start looking at the succesive elements
- while (entry->next_ != 0 &&
- entry->next_->ext_id_.index () != 0)
- {
- ctr++;
-
- // Change the entry
- entry = entry->next_;
- }
-
- // Set the index
- key.index (ctr + 1);
-
- // Now do a bind again with the new index
- return this->cache_map_.bind (key,
- val,
- entry);
-}
-
-
-int
-TAO_Connection_Cache_Manager::
- get_idle_handler (const TAO_Cache_ExtId & /*ext_id*/,
- HASH_MAP_ENTRY *&entry)
-{
- // We are sure that we have an entry
- do
- {
- // Found the entry, so check whether it is busy
- if (entry->int_id_.recycle_state () == ACE_RECYCLABLE_IDLE_AND_PURGABLE ||
- entry->int_id_.recycle_state () == ACE_RECYCLABLE_IDLE_BUT_NOT_PURGABLE)
- {
- // Save that in the handler
- entry->int_id_.handler ()->cache_map_entry (entry);
-
- // Mark the connection as busy
- entry->int_id_.recycle_state (ACE_RECYCLABLE_BUSY);
- return 0;
- }
- else
- {
- entry = entry->next_;
- }
- }
- // This would prevent us from moving to the next ext_id..
- while (entry->next_->ext_id_.index () != 0);
-
- // @@ There is a subtle assumption that I have made, ie. the
- // elements with higher indexes of ext_id will be placed
- // continously. That could be *bad*
-
- // We havent got a connection, so set the pointer to null.
- entry = 0;
- return -1;
-}
-
-#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
-
- // Instantiations for the Hash Map
-template class ACE_Equal_To<TAO_Cache_ExtId>;
-template class ACE_Hash<TAO_Cache_ExtId>;
-template class ACE_Hash_Map_Entry<TAO_Cache_ExtId, TAO_Cache_IntId>;
-template class ACE_Hash_Map_Manager<TAO_Cache_ExtId, TAO_Cache_IntId, ACE_Null_Mutex>;
-template class ACE_Hash_Map_Iterator<TAO_Cache_ExtId, TAO_Cache_IntId, ACE_Null_Mutex>;
-template class ACE_Hash_Map_Reverse_Iterator<TAO_Cache_ExtId, TAO_Cache_IntId, ACE_Null_Mutex>;
-template class ACE_Hash_Map_Manager_Ex<TAO_Cache_ExtId, TAO_Cache_IntId, ACE_Hash<TAO_Cache_ExtId>, ACE_Equal_To<TAO_Cache_ExtId>, ACE_Null_Mutex>;
-template class ACE_Hash_Map_Iterator_Base_Ex<TAO_Cache_ExtId, TAO_Cache_IntId, ACE_Hash<TAO_Cache_ExtId>, ACE_Equal_To<TAO_Cache_ExtId>, ACE_Null_Mutex>;
-template class ACE_Hash_Map_Iterator_Ex<TAO_Cache_ExtId, TAO_Cache_IntId, ACE_Hash<TAO_Cache_ExtId>, ACE_Equal_To<TAO_Cache_ExtId>, ACE_Null_Mutex>;
-template class ACE_Hash_Map_Reverse_Iterator_Ex<TAO_Cache_ExtId, TAO_Cache_IntId, ACE_Hash<TAO_Cache_ExtId>, ACE_Equal_To<TAO_Cache_ExtId>, ACE_Null_Mutex>;
-
-#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
-
- // Instantiations for the Hash Map
-#pragma instantiate ACE_Equal_To<TAO_Cache_ExtId>
-#pragma instantiate ACE_Hash<TAO_Cache_ExtId>
-#pragma instantiate ACE_Hash_Map_Entry<TAO_Cache_ExtId, TAO_Cache_IntId>
-#pragma instantiate ACE_Hash_Map_Manager<TAO_Cache_ExtId, TAO_Cache_IntId, ACE_Null_Mutex>
-#pragma instantiate ACE_Hash_Map_Iterator<TAO_Cache_ExtId, TAO_Cache_IntId, ACE_Null_Mutex>
-#pragma instantiate ACE_Hash_Map_Reverse_Iterator<TAO_Cache_ExtId, TAO_Cache_IntId, ACE_Null_Mutex>
-#pragma instantiate ACE_Hash_Map_Manager_Ex<TAO_Cache_ExtId, TAO_Cache_IntId, ACE_Hash<TAO_Cache_ExtId>, ACE_Equal_To<TAO_Cache_ExtId>, ACE_Null_Mutex>
-#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<TAO_Cache_ExtId, TAO_Cache_IntId, ACE_Hash<TAO_Cache_ExtId>, ACE_Equal_To<TAO_Cache_ExtId>, ACE_Null_Mutex>
-#pragma instantiate ACE_Hash_Map_Iterator_Ex<TAO_Cache_ExtId, TAO_Cache_IntId, ACE_Hash<TAO_Cache_ExtId>, ACE_Equal_To<TAO_Cache_ExtId>, ACE_Null_Mutex>
-#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<TAO_Cache_ExtId, TAO_Cache_IntId, ACE_Hash<TAO_Cache_ExtId>, ACE_Equal_To<TAO_Cache_ExtId>, ACE_Null_Mutex>
-
-#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */