diff --git a/llarp/iwp/session.cpp b/llarp/iwp/session.cpp index b2109c479c..49bcab4534 100644 --- a/llarp/iwp/session.cpp +++ b/llarp/iwp/session.cpp @@ -141,6 +141,8 @@ namespace llarp void Session::EncryptAndSend(ILinkSession::Packet_t data) { + if (m_State == State::Closed) + return; m_EncryptNext.emplace_back(std::move(data)); TriggerPump(); if (!IsEstablished()) @@ -176,12 +178,9 @@ namespace llarp return; auto close_msg = CreatePacket(Command::eCLOS, 0, 16, 16); m_Parent->UnmapAddr(m_RemoteAddr); - m_State = State::Closed; - if (m_SentClosed.test_and_set()) - return; EncryptAndSend(std::move(close_msg)); - LogInfo(m_Parent->PrintableName(), " closing connection to ", m_RemoteAddr); + m_State = State::Closed; } bool @@ -352,7 +351,7 @@ namespace llarp bool Session::TimedOut(llarp_time_t now) const { - if (m_State == State::Ready) + if (m_State == State::Ready || m_State == State::LinkIntro) { return now > m_LastRX && now - m_LastRX diff --git a/llarp/iwp/session.hpp b/llarp/iwp/session.hpp index 210a37a1ec..1e0e6b3c41 100644 --- a/llarp/iwp/session.hpp +++ b/llarp/iwp/session.hpp @@ -206,7 +206,6 @@ namespace llarp std::atomic_flag m_PlaintextEmpty; llarp::thread::Queue m_PlaintextRecv; - std::atomic_flag m_SentClosed; void EncryptWorker(CryptoQueue_t msgs); diff --git a/llarp/router/router.cpp b/llarp/router/router.cpp index 6a4db8c5ae..9bf59d5f7f 100644 --- a/llarp/router/router.cpp +++ b/llarp/router/router.cpp @@ -482,8 +482,8 @@ namespace llarp LogError("RC is invalid, not saving"); return false; } - if (m_isServiceNode) - _nodedb->Put(_rc); + if (IsServiceNode()) + _nodedb->Put(rc()); QueueDiskIO([&]() { HandleSaveRC(); }); return true; }