X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Ffilter_session_shared.cpp;fp=src%2Ffilter_session_shared.cpp;h=eb8b23a0b33005f97b564376606cf3d7a67e2559;hb=a395969830b02ecb29a24d455d60edb394af77e4;hp=d14dc1b140c728275524659b244cdc27e5310989;hpb=1140d9a5e0798d73a36f72ffc89c94228115b1f3;p=metaproxy-moved-to-github.git 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)