diff --git a/libi2pd/TunnelPool.cpp b/libi2pd/TunnelPool.cpp index 284a79c6..0a855350 100644 --- a/libi2pd/TunnelPool.cpp +++ b/libi2pd/TunnelPool.cpp @@ -365,15 +365,19 @@ namespace tunnel { it.second.second->SetState (eTunnelStateFailed); { - std::unique_lock l(m_InboundTunnelsMutex); - if (m_InboundTunnels.size () > 1 || m_NumInboundTunnels <= 1) // don't fail last tunnel - { - m_InboundTunnels.erase (it.second.second); - if (m_LocalDestination) - m_LocalDestination->SetLeaseSetUpdated (); - } - else - it.second.second->SetState (eTunnelStateTestFailed); + bool failed = false; + { + std::unique_lock l(m_InboundTunnelsMutex); + if (m_InboundTunnels.size () > 1 || m_NumInboundTunnels <= 1) // don't fail last tunnel + { + m_InboundTunnels.erase (it.second.second); + failed = true; + } + else + it.second.second->SetState (eTunnelStateTestFailed); + } + if (failed && m_LocalDestination) + m_LocalDestination->SetLeaseSetUpdated (); } if (m_LocalDestination) m_LocalDestination->SetLeaseSetUpdated ();