Browse Source

don't process SSU messages after termination

pull/1634/head
orignal 4 years ago
parent
commit
75a31c79ae
  1. 13
      libi2pd/SSU.cpp
  2. 2
      libi2pd/SSU.h

13
libi2pd/SSU.cpp

@ -127,18 +127,18 @@ namespace transport
delete m_ReceiversThread; delete m_ReceiversThread;
m_ReceiversThread = nullptr; m_ReceiversThread = nullptr;
} }
if (m_Thread)
{
m_Thread->join ();
delete m_Thread;
m_Thread = nullptr;
}
if (m_ReceiversThreadV6) if (m_ReceiversThreadV6)
{ {
m_ReceiversThreadV6->join (); m_ReceiversThreadV6->join ();
delete m_ReceiversThreadV6; delete m_ReceiversThreadV6;
m_ReceiversThreadV6 = nullptr; m_ReceiversThreadV6 = nullptr;
} }
if (m_Thread)
{
m_Thread->join ();
delete m_Thread;
m_Thread = nullptr;
}
} }
void SSUServer::Run () void SSUServer::Run ()
@ -377,6 +377,7 @@ namespace transport
void SSUServer::HandleReceivedPackets (std::vector<SSUPacket *> packets, void SSUServer::HandleReceivedPackets (std::vector<SSUPacket *> packets,
std::map<boost::asio::ip::udp::endpoint, std::shared_ptr<SSUSession> > * sessions) std::map<boost::asio::ip::udp::endpoint, std::shared_ptr<SSUSession> > * sessions)
{ {
if (!m_IsRunning) return;
std::shared_ptr<SSUSession> session; std::shared_ptr<SSUSession> session;
for (auto& packet: packets) for (auto& packet: packets)
{ {

2
libi2pd/SSU.h

@ -119,7 +119,7 @@ namespace transport
}; };
bool m_OnlyV6; bool m_OnlyV6;
bool m_IsRunning; volatile bool m_IsRunning;
std::thread * m_Thread, * m_ReceiversThread, * m_ReceiversThreadV6; std::thread * m_Thread, * m_ReceiversThread, * m_ReceiversThreadV6;
boost::asio::io_service m_Service, m_ReceiversService, m_ReceiversServiceV6; boost::asio::io_service m_Service, m_ReceiversService, m_ReceiversServiceV6;
boost::asio::io_service::work m_Work, m_ReceiversWork, m_ReceiversWorkV6; boost::asio::io_service::work m_Work, m_ReceiversWork, m_ReceiversWorkV6;

Loading…
Cancel
Save