summaryrefslogtreecommitdiff
path: root/TAO/tests/Bug_3812_Regression/mock_transport.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tests/Bug_3812_Regression/mock_transport.h')
-rw-r--r--TAO/tests/Bug_3812_Regression/mock_transport.h125
1 files changed, 0 insertions, 125 deletions
diff --git a/TAO/tests/Bug_3812_Regression/mock_transport.h b/TAO/tests/Bug_3812_Regression/mock_transport.h
deleted file mode 100644
index 5101d883f2b..00000000000
--- a/TAO/tests/Bug_3812_Regression/mock_transport.h
+++ /dev/null
@@ -1,125 +0,0 @@
-// $Id$
-
-#include "tao/ORB_Core.h"
-
-typedef TAO::Transport_Cache_Manager_T<mock_transport, mock_tdi, mock_ps> TCM;
-
-extern TCM* tcm;
-extern int result;
-extern TAO_SYNCH_MUTEX test_lock;
-extern TAO_Condition<TAO_SYNCH_MUTEX> test_condition;
-
-
-class mock_transport
-{
-public:
- mock_transport (TAO_ORB_Core *orb_core)
- : id_(0)
- , is_connected_(false)
- , entry_(0)
- , purging_order_ (0)
- , purged_count_ (0)
- , handler_lock_ (orb_core->resource_factory ()->create_cached_connection_lock ())
- {}
-
- size_t id (void) const {return id_;}
- void id (size_t id) { this->id_ = id;}
- unsigned long purging_order (void) const {return purging_order_;}
- void purging_order (unsigned long purging_order) { this->purging_order_ = purging_order;}
- bool is_connected (void) const {return is_connected_;}
- void is_connected (bool is_connected) { this->is_connected_ = is_connected;}
- ACE_Event_Handler::Reference_Count add_reference (void) {return 0;}
- ACE_Event_Handler::Reference_Count remove_reference (void) {return 0;}
-
- // Implementation needs be similar to TAO_Transport::cache_map_entry().
- void cache_map_entry (TCM::HASH_MAP_ENTRY *entry) {
- ACE_GUARD (ACE_Lock, ace_mon, *this->handler_lock_);
- ACE_DEBUG ((LM_DEBUG, "(%P|%t)cache_map_entry %X\n", entry));
- this->entry_ = entry;
- }
- TCM::HASH_MAP_ENTRY *cache_map_entry (void) {return this->entry_;}
- void close_connection (void) { purged_count_ = ++global_purged_count;};
- int purged_count (void) { return this->purged_count_;}
- bool can_be_purged (void) { return true;}
-
- // Implementation needs be similar to TAO_Transport::purge_entry().
- int purge_entry (void)
- {
- TCM::HASH_MAP_ENTRY* entry = 0;
- {
- ACE_GUARD_RETURN (ACE_Lock, ace_mon, *this->handler_lock_, -1);
- ACE_DEBUG ((LM_DEBUG, "(%P|%t)purge_entry %X\n", this->entry_));
- entry = this->entry_;
- this->entry_ = 0;
- }
- return tcm->purge_entry (entry);
- }
-
- // Implementation needs be similar to TAO_Transport::make_idle().
- //
- // int
- // TAO_Transport::make_idle (void)
- // {
- // if (TAO_debug_level > 3)
- // {
- // ACE_DEBUG ((LM_DEBUG,
- // ACE_TEXT ("TAO (%P|%t) - Transport[%d]::make_idle\n"),
- // this->id ()));
- // }
- //
- // return this->transport_cache_manager ().make_idle (this->cache_map_entry_);
- // }
-
- // Code are added to simulate the situation that the cached entry pointer passed
- // to TCM to make entry idle is deleted by another thread b/c of re-cache transport
- // and cause TCM make idle on an invalid entry. Otherwise we need delay and similar
- // code in TCM::make_idl() to reproduce the problem.
-
- int make_idle (void)
- {
- static bool is_first = true;
-
- ACE_DEBUG ((LM_DEBUG, "(%P|%t)make_idle pass entry %X\n", this->entry_));
-
- TCM::HASH_MAP_ENTRY* entry = this->entry_;
-
- // The first thread comes to this point, record the entry
- // and wait for second thread to process listen point which
- // re-cache transport.
- if (is_first)
- {
- is_first = false;
- test_condition.wait ();
- }
-
- ACE_DEBUG ((LM_DEBUG, "(%P|%t)make_idle execute on entry %X and now entry %X\n",
- entry, this->entry_));
-
- // When the first thread is at this point, the entry is
- // deleted by second thread, so make idle on the invalid
- // entry cause SEGV. It's possible that the memory is still
- // available then next checking if entry is changed should
- // confirm if the entry is valid or not.
- int ret = tcm->make_idle (entry);
- if (entry != this->entry_)
- {
- ACE_ERROR ((LM_ERROR, ACE_TEXT ("(%P|%t)ERROR: Entry was changed ")
- ACE_TEXT ("after passing to TCM and before calling make_idl.\n")));
- result = 1;
- }
-
- return ret;
- }
-
-
-private:
- size_t id_;
- bool is_connected_;
- TCM::HASH_MAP_ENTRY *entry_;
- unsigned long purging_order_;
- /// When did we got purged
- int purged_count_;
- mutable ACE_Lock *handler_lock_;
-};
-
-