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
std::vector<i2p::tunnel::TunnelMessageBlock> send; std::vector<i2p::tunnel::TunnelMessageBlock> send;
auto routingPath = GetSharedRoutingPath(); auto routingPath = GetSharedRoutingPath();
// if we don't have a routing path we will drop all queued messages // 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) for (const auto & msg : m_SendQueue)
{ {

28
SAM.cpp

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

1
SAM.h

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

Loading…
Cancel
Save