always remove dht nodes, lock sometimes, don't make router destructor virtual

pull/42/head
Jeff Becker 6 years ago
parent b96ee375c9
commit f03603a0da
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -22,9 +22,7 @@ llarp_dht_context_free(struct llarp_dht_context *ctx)
void
__llarp_dht_remove_peer(struct llarp_dht_context *ctx, const byte_t *id)
{
llarp::dht::Key_t k = id;
llarp::LogDebug("Removing ", k, " to DHT");
ctx->impl.nodes->DelNode(k);
ctx->impl.nodes->DelNode(id);
}
void

@ -189,21 +189,24 @@ namespace llarp
bool
ILinkLayer::SendTo(const PubKey& remote, llarp_buffer_t buf)
{
Lock l(m_AuthedLinksMutex);
auto range = m_AuthedLinks.equal_range(remote);
auto itr = range.first;
// pick lowest backlog session
size_t min = std::numeric_limits< size_t >::max();
ILinkSession* s = nullptr;
while(itr != range.second)
{
auto backlog = itr->second->SendQueueBacklog();
if(backlog < min)
Lock l(m_AuthedLinksMutex);
auto range = m_AuthedLinks.equal_range(remote);
auto itr = range.first;
// pick lowest backlog session
size_t min = std::numeric_limits< size_t >::max();
while(itr != range.second)
{
s = itr->second.get();
min = backlog;
auto backlog = itr->second->SendQueueBacklog();
if(backlog < min)
{
s = itr->second.get();
min = backlog;
}
++itr;
}
++itr;
}
return s && s->SendMessageBuffer(buf);
}

@ -509,6 +509,7 @@ namespace llarp
}
}
}
void
Stop()
{

@ -560,11 +560,11 @@ llarp_router::ScheduleTicker(uint64_t ms)
void
llarp_router::SessionClosed(const llarp::RouterID &remote)
{
// remove from valid routers and dht if it's a valid router
__llarp_dht_remove_peer(dht, remote);
// remove from valid routers if it's a valid router
auto itr = validRouters.find(remote);
if(itr == validRouters.end())
return;
__llarp_dht_remove_peer(dht, remote);
validRouters.erase(itr);
}

@ -140,7 +140,7 @@ struct llarp_router
m_PersistingSessions;
llarp_router();
virtual ~llarp_router();
~llarp_router();
void HandleLinkSessionEstablished(llarp::RouterContact);

Loading…
Cancel
Save