diff options
author | irfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-07-20 04:48:27 +0000 |
---|---|---|
committer | irfan <irfan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1999-07-20 04:48:27 +0000 |
commit | d15865d73320acdf436dbc65d169384fc6a2eb21 (patch) | |
tree | c8d059d9e3b1251fb69e383df1f7b023b912a762 /ace/Strategies_T.cpp | |
parent | 852ea7a8f9b54d2736e42048ec8c857a4908589a (diff) | |
download | ATCD-d15865d73320acdf436dbc65d169384fc6a2eb21.tar.gz |
ChangeLogTag:Mon Jul 19 22:46:54 1999 Irfan Pyarali <irfan@cs.wustl.edu>
Diffstat (limited to 'ace/Strategies_T.cpp')
-rw-r--r-- | ace/Strategies_T.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/ace/Strategies_T.cpp b/ace/Strategies_T.cpp index f2d720bff58..d449af737be 100644 --- a/ace/Strategies_T.cpp +++ b/ace/Strategies_T.cpp @@ -375,6 +375,7 @@ ACE_Cached_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX>::ACE_Cache int delete_lock) : lock_ (lock), delete_lock_ (delete_lock), + reverse_lock_ (0), creation_strategy_ (0), delete_creation_strategy_ (0), concurrency_strategy_ (0), @@ -391,6 +392,9 @@ ACE_Cached_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX>::ACE_Cache this->delete_lock_ = 1; } + ACE_NEW (this->reverse_lock_, + REVERSE_MUTEX (*this->lock_)); + if (this->open (cre_s, con_s, rec_s) == -1) ACE_ERROR ((LM_ERROR, ASYS_TEXT ("%p\n"), @@ -649,6 +653,30 @@ ACE_Cached_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX>::find_or_c } template<class SVC_HANDLER, ACE_PEER_CONNECTOR_1, class MUTEX> int +ACE_Cached_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX>::new_connection +(SVC_HANDLER *&sh, + const ACE_PEER_CONNECTOR_ADDR &remote_addr, + ACE_Time_Value *timeout, + const ACE_PEER_CONNECTOR_ADDR &local_addr, + int reuse_addr, + int flags, + int perms) +{ + // Yow, Reverse Guard! Let go of the lock for the duration of the + // actual connect. This will allow other threads to hack on the + // connection cache while this thread creates the new connection. + ACE_GUARD_RETURN (REVERSE_MUTEX, ace_mon, *this->reverse_lock_, -1); + + return this->CONNECT_STRATEGY::connect_svc_handler (sh, + remote_addr, + timeout, + local_addr, + reuse_addr, + flags, + perms); +} + +template<class SVC_HANDLER, ACE_PEER_CONNECTOR_1, class MUTEX> int ACE_Cached_Connect_Strategy<SVC_HANDLER, ACE_PEER_CONNECTOR_2, MUTEX>::connect_svc_handler (SVC_HANDLER *&sh, const ACE_PEER_CONNECTOR_ADDR &remote_addr, |