diff --git a/libi2pd/Transports.cpp b/libi2pd/Transports.cpp index 505c96be..2d840e78 100644 --- a/libi2pd/Transports.cpp +++ b/libi2pd/Transports.cpp @@ -896,10 +896,12 @@ namespace transport m_X25519KeysPairSupplier.Return (pair); } - void Transports::PeerConnected (std::shared_ptr session) + void Transports::PeerConnected (std::weak_ptr session) { - boost::asio::post (*m_Service, [session, this]() + boost::asio::post (*m_Service, [weakSession = std::move(session), this]() { + auto session = weakSession.lock(); + if (!session) return; auto remoteIdentity = session->GetRemoteIdentity (); if (!remoteIdentity) return; auto ident = remoteIdentity->GetIdentHash (); @@ -973,10 +975,12 @@ namespace transport }); } - void Transports::PeerDisconnected (std::shared_ptr session) + void Transports::PeerDisconnected (std::weak_ptr session) { - boost::asio::post (*m_Service, [session, this]() + boost::asio::post (*m_Service, [weakSession = std::move(session), this]() { + auto session = weakSession.lock(); + if (!session) return; auto remoteIdentity = session->GetRemoteIdentity (); if (!remoteIdentity) return; auto ident = remoteIdentity->GetIdentHash (); diff --git a/libi2pd/Transports.h b/libi2pd/Transports.h index b0c5bee4..3e5a96e8 100644 --- a/libi2pd/Transports.h +++ b/libi2pd/Transports.h @@ -156,8 +156,8 @@ namespace transport std::future > SendMessage (const i2p::data::IdentHash& ident, std::shared_ptr msg); std::future > SendMessages (const i2p::data::IdentHash& ident, std::list >&& msgs); - void PeerConnected (std::shared_ptr session); - void PeerDisconnected (std::shared_ptr session); + void PeerConnected (std::weak_ptr session); + void PeerDisconnected (std::weak_ptr session); bool IsConnected (const i2p::data::IdentHash& ident) const; void UpdatePeerParams (std::shared_ptr r);