Browse Source

fix sam crash on exit and datagram crash with no outbound tunnel

pull/771/head
Jeff Becker 8 years ago
parent
commit
965896b932
  1. 2
      Datagram.cpp
  2. 28
      SAM.cpp
  3. 1
      SAM.h

2
Datagram.cpp

@ -310,7 +310,7 @@ namespace datagram @@ -310,7 +310,7 @@ namespace datagram
std::vector<i2p::tunnel::TunnelMessageBlock> send;
auto routingPath = GetSharedRoutingPath();
// if we don't have a routing path we will drop all queued messages
if(routingPath)
if(routingPath && routingPath->outboundTunnel && routingPath->remoteLease)
{
for (const auto & msg : m_SendQueue)
{

28
SAM.cpp

@ -711,11 +711,6 @@ namespace client @@ -711,11 +711,6 @@ namespace client
PumpBacklog();
}
SAMSession::~SAMSession ()
{
i2p::client::context.DeleteLocalDestination (localDestination);
}
void SAMSession::AcceptI2P(std::shared_ptr<i2p::stream::Stream> stream)
{
if(!stream) return; // fail
@ -767,18 +762,19 @@ namespace client @@ -767,18 +762,19 @@ namespace client
void SAMSession::CloseStreams ()
{
m_BacklogPumper.cancel();
localDestination->GetService().post([&] () {
std::lock_guard<std::mutex> lock(m_SocketsMutex);
for (auto& sock : m_Sockets) {
sock->CloseStream();
}
for(auto & stream : m_Backlog) {
stream->Close();
}
// XXX: should this be done inside locked parts?
m_Sockets.clear();
m_Backlog.clear();
});
std::lock_guard<std::mutex> lock(m_SocketsMutex);
for (auto& sock : m_Sockets) {
sock->CloseStream();
}
for(auto & stream : m_Backlog) {
stream->Close();
}
m_Sockets.clear();
m_Backlog.clear();
i2p::client::context.DeleteLocalDestination (localDestination);
});
}
SAMBridge::SAMBridge (const std::string& address, int port):

1
SAM.h

@ -165,7 +165,6 @@ namespace client @@ -165,7 +165,6 @@ namespace client
}
SAMSession (std::shared_ptr<ClientDestination> dest);
~SAMSession ();
void AcceptI2P(std::shared_ptr<i2p::stream::Stream> stream);

Loading…
Cancel
Save