diff --git a/libi2pd/SSU2Session.cpp b/libi2pd/SSU2Session.cpp index 0ee0a9ec..b335d31a 100644 --- a/libi2pd/SSU2Session.cpp +++ b/libi2pd/SSU2Session.cpp @@ -142,7 +142,7 @@ namespace transport void SSU2Session::ScheduleConnectTimer () { m_ConnectTimer.cancel (); - m_ConnectTimer.expires_from_now (boost::posix_time::seconds(SSU2_CONNECT_TIMEOUT)); + m_ConnectTimer.expires_after (std::chrono::seconds(SSU2_CONNECT_TIMEOUT)); m_ConnectTimer.async_wait (std::bind (&SSU2Session::HandleConnectTimer, shared_from_this (), std::placeholders::_1)); } @@ -282,9 +282,9 @@ namespace transport void SSU2Session::Terminate () { - if (m_State != eSSU2SessionStateTerminated) + auto state = m_State.exchange (eSSU2SessionStateTerminated); + if (state != eSSU2SessionStateTerminated) { - m_State = eSSU2SessionStateTerminated; m_ConnectTimer.cancel (); m_OnEstablished = nullptr; if (m_RelayTag) diff --git a/libi2pd/SSU2Session.h b/libi2pd/SSU2Session.h index 1985ec33..6aa18e15 100644 --- a/libi2pd/SSU2Session.h +++ b/libi2pd/SSU2Session.h @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -374,7 +375,7 @@ namespace transport i2p::data::RouterInfo::CompatibleTransports m_RemoteTransports, m_RemotePeerTestTransports; int m_RemoteVersion; uint64_t m_DestConnID, m_SourceConnID; - SSU2SessionState m_State; + std::atomic m_State; uint8_t m_KeyDataSend[64], m_KeyDataReceive[64]; uint32_t m_SendPacketNum, m_ReceivePacketNum, m_LastDatetimeSentPacketNum; std::set m_OutOfSequencePackets; // packet nums > receive packet num @@ -392,7 +393,7 @@ namespace transport size_t m_WindowSize, m_RTO; uint32_t m_RelayTag; // between Bob and Charlie OnEstablished m_OnEstablished; // callback from Established - boost::asio::deadline_timer m_ConnectTimer; + boost::asio::steady_timer m_ConnectTimer; SSU2TerminationReason m_TerminationReason; size_t m_MaxPayloadSize; std::unique_ptr > m_PathChallenge;