diff --git a/contrib/epee/include/net/levin_protocol_handler_async.h b/contrib/epee/include/net/levin_protocol_handler_async.h index 5e0c7a1a..c0c94c44 100644 --- a/contrib/epee/include/net/levin_protocol_handler_async.h +++ b/contrib/epee/include/net/levin_protocol_handler_async.h @@ -817,7 +817,9 @@ template template bool async_protocol_handler_config::foreach_connection(callback_t cb) { CRITICAL_REGION_LOCAL(m_connects_lock); - for(auto& c: m_connects) + //in case any of the cb() leads to erasing items from m_connects, let's go over local copy of it + auto connects_local = m_connects; + for(auto& c: connects_local) { async_protocol_handler* aph = c.second; if(!cb(aph->get_context_ref()))