fixed deadlock

This commit is contained in:
orignal 2024-05-17 19:07:51 -04:00
parent 940628bf36
commit 285e693a4e

View File

@ -365,15 +365,19 @@ namespace tunnel
{ {
it.second.second->SetState (eTunnelStateFailed); it.second.second->SetState (eTunnelStateFailed);
{ {
std::unique_lock<std::mutex> l(m_InboundTunnelsMutex); bool failed = false;
if (m_InboundTunnels.size () > 1 || m_NumInboundTunnels <= 1) // don't fail last tunnel {
{ std::unique_lock<std::mutex> l(m_InboundTunnelsMutex);
m_InboundTunnels.erase (it.second.second); if (m_InboundTunnels.size () > 1 || m_NumInboundTunnels <= 1) // don't fail last tunnel
if (m_LocalDestination) {
m_LocalDestination->SetLeaseSetUpdated (); m_InboundTunnels.erase (it.second.second);
} failed = true;
else }
it.second.second->SetState (eTunnelStateTestFailed); else
it.second.second->SetState (eTunnelStateTestFailed);
}
if (failed && m_LocalDestination)
m_LocalDestination->SetLeaseSetUpdated ();
} }
if (m_LocalDestination) if (m_LocalDestination)
m_LocalDestination->SetLeaseSetUpdated (); m_LocalDestination->SetLeaseSetUpdated ();