From: Adam Dickmeiss Date: Mon, 2 Jun 2014 09:19:58 +0000 (+0200) Subject: session_shared: mutex lock in BackendClass::release_backend MP-550 X-Git-Tag: v1.5.3~2 X-Git-Url: http://git.indexdata.com/?p=metaproxy-moved-to-github.git;a=commitdiff_plain;h=a395969830b02ecb29a24d455d60edb394af77e4 session_shared: mutex lock in BackendClass::release_backend MP-550 --- diff --git a/src/filter_session_shared.cpp b/src/filter_session_shared.cpp index d14dc1b..eb8b23a 100644 --- a/src/filter_session_shared.cpp +++ b/src/filter_session_shared.cpp @@ -305,27 +305,29 @@ void yf::SessionShared::BackendClass::release_backend(BackendInstancePtr b) void yf::SessionShared::BackendClass::remove_backend(BackendInstancePtr b) { - BackendInstanceList::iterator it = m_backend_list.begin(); - - while (it != m_backend_list.end()) { - if (*it == b) + boost::mutex::scoped_lock lock(m_mutex_backend_class); + BackendInstanceList::iterator it = m_backend_list.begin(); + for (;;) { - mp::odr odr; - (*it)->m_close_package->response() = odr.create_close( - 0, Z_Close_lackOfActivity, 0); - (*it)->m_close_package->session().close(); - (*it)->m_close_package->move(); - - it = m_backend_list.erase(it); - } - else + if (it == m_backend_list.end()) + return; + if (*it == b) + { + it = m_backend_list.erase(it); + break; + } it++; + } } + mp::odr odr; + b->m_close_package->response() = odr.create_close( + 0, Z_Close_lackOfActivity, 0); + b->m_close_package->session().close(); + b->m_close_package->move(); } - yf::SessionShared::BackendInstancePtr yf::SessionShared::BackendClass::get_backend( const mp::Package &frontend_package)