diff --git a/libi2pd/TunnelPool.cpp b/libi2pd/TunnelPool.cpp index 898a05bc..04200428 100644 --- a/libi2pd/TunnelPool.cpp +++ b/libi2pd/TunnelPool.cpp @@ -337,7 +337,10 @@ namespace tunnel { it.second.first->SetState (eTunnelStateFailed); std::unique_lock l(m_OutboundTunnelsMutex); - m_OutboundTunnels.erase (it.second.first); + if (m_OutboundTunnels.size () > 1) // don't fail last tunnel + m_OutboundTunnels.erase (it.second.first); + else + it.second.first->SetState (eTunnelStateTestFailed); } else it.second.first->SetState (eTunnelStateTestFailed); @@ -349,7 +352,10 @@ namespace tunnel it.second.second->SetState (eTunnelStateFailed); { std::unique_lock l(m_InboundTunnelsMutex); - m_InboundTunnels.erase (it.second.second); + if (m_InboundTunnels.size () > 1) // don't fail last tunnel + m_InboundTunnels.erase (it.second.second); + else + it.second.first->SetState (eTunnelStateTestFailed); } if (m_LocalDestination) m_LocalDestination->SetLeaseSetUpdated ();