diff --git a/Tunnel.cpp b/Tunnel.cpp index a372452c..04ed9bdc 100644 --- a/Tunnel.cpp +++ b/Tunnel.cpp @@ -297,7 +297,11 @@ namespace tunnel void Tunnels::DeleteTunnelPool (TunnelPool * pool) { - if (pool) pool->SetDeleted (); + if (pool) + { + pool->DetachTunnels (); + pool->SetDeleted (); + } } void Tunnels::AddTransitTunnel (TransitTunnel * tunnel) diff --git a/TunnelPool.cpp b/TunnelPool.cpp index c95f6fb3..af720231 100644 --- a/TunnelPool.cpp +++ b/TunnelPool.cpp @@ -17,6 +17,11 @@ namespace tunnel } TunnelPool::~TunnelPool () + { + DetachTunnels (); + } + + void TunnelPool::DetachTunnels () { { std::unique_lock l(m_InboundTunnelsMutex); @@ -28,8 +33,8 @@ namespace tunnel for (auto it: m_OutboundTunnels) it->SetTunnelPool (nullptr); } - } - + } + void TunnelPool::TunnelCreated (InboundTunnel * createdTunnel) { { diff --git a/TunnelPool.h b/TunnelPool.h index 816decf3..0c680aa4 100644 --- a/TunnelPool.h +++ b/TunnelPool.h @@ -49,7 +49,8 @@ namespace tunnel void ProcessDeliveryStatus (I2NPMessage * msg); bool IsDeleted () const { return m_IsDeleted; }; - void SetDeleted () { m_IsDeleted = true; } + void SetDeleted () { m_IsDeleted = true; }; + void DetachTunnels (); private: