mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 00:00:29 +03:00
terminate acceptor and sessions on stop
This commit is contained in:
parent
84235fe479
commit
a44ca91409
3
BOB.cpp
3
BOB.cpp
@ -580,9 +580,10 @@ namespace client
|
|||||||
|
|
||||||
void BOBCommandChannel::Stop ()
|
void BOBCommandChannel::Stop ()
|
||||||
{
|
{
|
||||||
|
m_IsRunning = false;
|
||||||
for (auto it: m_Destinations)
|
for (auto it: m_Destinations)
|
||||||
it.second->Stop ();
|
it.second->Stop ();
|
||||||
m_IsRunning = false;
|
m_Acceptor.cancel ();
|
||||||
m_Service.stop ();
|
m_Service.stop ();
|
||||||
if (m_Thread)
|
if (m_Thread)
|
||||||
{
|
{
|
||||||
|
30
SAM.cpp
30
SAM.cpp
@ -568,6 +568,24 @@ namespace client
|
|||||||
LogPrint (eLogWarning, "Datagram size ", len," exceeds buffer");
|
LogPrint (eLogWarning, "Datagram size ", len," exceeds buffer");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SAMSession::SAMSession (ClientDestination * localDestination)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SAMSession::~SAMSession ()
|
||||||
|
{
|
||||||
|
for (auto it: sockets)
|
||||||
|
it->SetSocketType (eSAMSocketTypeTerminated);
|
||||||
|
i2p::client::context.DeleteLocalDestination (localDestination);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SAMSession::CloseStreams ()
|
||||||
|
{
|
||||||
|
for (auto it: sockets)
|
||||||
|
it->CloseStream ();
|
||||||
|
sockets.clear ();
|
||||||
|
}
|
||||||
|
|
||||||
SAMBridge::SAMBridge (int port):
|
SAMBridge::SAMBridge (int port):
|
||||||
m_IsRunning (false), m_Thread (nullptr),
|
m_IsRunning (false), m_Thread (nullptr),
|
||||||
m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)),
|
m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)),
|
||||||
@ -591,6 +609,9 @@ namespace client
|
|||||||
void SAMBridge::Stop ()
|
void SAMBridge::Stop ()
|
||||||
{
|
{
|
||||||
m_IsRunning = false;
|
m_IsRunning = false;
|
||||||
|
m_Acceptor.cancel ();
|
||||||
|
m_DatagramSocket.cancel ();
|
||||||
|
m_Sessions.clear ();
|
||||||
m_Service.stop ();
|
m_Service.stop ();
|
||||||
if (m_Thread)
|
if (m_Thread)
|
||||||
{
|
{
|
||||||
@ -661,10 +682,8 @@ namespace client
|
|||||||
}
|
}
|
||||||
if (localDestination)
|
if (localDestination)
|
||||||
{
|
{
|
||||||
SAMSession session;
|
|
||||||
session.localDestination = localDestination;
|
|
||||||
std::unique_lock<std::mutex> l(m_SessionsMutex);
|
std::unique_lock<std::mutex> l(m_SessionsMutex);
|
||||||
auto ret = m_Sessions.insert (std::pair<std::string, SAMSession>(id, session));
|
auto ret = m_Sessions.insert (std::pair<std::string, SAMSession>(id, SAMSession (localDestination)));
|
||||||
if (!ret.second)
|
if (!ret.second)
|
||||||
LogPrint ("Session ", id, " already exists");
|
LogPrint ("Session ", id, " already exists");
|
||||||
return &(ret.first->second);
|
return &(ret.first->second);
|
||||||
@ -678,10 +697,7 @@ namespace client
|
|||||||
auto it = m_Sessions.find (id);
|
auto it = m_Sessions.find (id);
|
||||||
if (it != m_Sessions.end ())
|
if (it != m_Sessions.end ())
|
||||||
{
|
{
|
||||||
for (auto it1: it->second.sockets)
|
it->second.CloseStreams ();
|
||||||
it1->CloseStream ();
|
|
||||||
it->second.sockets.clear ();
|
|
||||||
i2p::client::context.DeleteLocalDestination (it->second.localDestination);
|
|
||||||
m_Sessions.erase (it);
|
m_Sessions.erase (it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
11
SAM.h
11
SAM.h
@ -131,12 +131,11 @@ namespace client
|
|||||||
{
|
{
|
||||||
ClientDestination * localDestination;
|
ClientDestination * localDestination;
|
||||||
std::list<std::shared_ptr<SAMSocket> > sockets;
|
std::list<std::shared_ptr<SAMSocket> > sockets;
|
||||||
|
|
||||||
~SAMSession ()
|
SAMSession (ClientDestination * localDestination);
|
||||||
{
|
~SAMSession ();
|
||||||
for (auto it: sockets)
|
|
||||||
it->SetSocketType (eSAMSocketTypeTerminated);
|
void CloseStreams ();
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class SAMBridge
|
class SAMBridge
|
||||||
|
Loading…
Reference in New Issue
Block a user