mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2026-05-24 23:26:07 +00:00
avoid possible double termination. Use atomic swap. steady_timer instead deadline_time
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include <memory>
|
||||
#include <functional>
|
||||
#include <atomic>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <list>
|
||||
@@ -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<SSU2SessionState> m_State;
|
||||
uint8_t m_KeyDataSend[64], m_KeyDataReceive[64];
|
||||
uint32_t m_SendPacketNum, m_ReceivePacketNum, m_LastDatetimeSentPacketNum;
|
||||
std::set<uint32_t> 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<std::pair<uint64_t, boost::asio::ip::udp::endpoint> > m_PathChallenge;
|
||||
|
||||
Reference in New Issue
Block a user