mirror of
https://github.com/oxen-io/lokinet
synced 2023-12-14 06:53:00 +01:00
ping less and try not to double free in llarp_router::SendToOrQueue
This commit is contained in:
parent
ed5867e49f
commit
2b8bd11f5e
|
@ -576,7 +576,9 @@ namespace llarp
|
||||||
SendQueueBacklog = [&]() -> size_t { return sendq.size(); };
|
SendQueueBacklog = [&]() -> size_t { return sendq.size(); };
|
||||||
|
|
||||||
SendKeepAlive = [&]() -> bool {
|
SendKeepAlive = [&]() -> bool {
|
||||||
if(sendq.size() == 0 && state == eSessionReady)
|
auto now = llarp_time_now_ms();
|
||||||
|
if(sendq.size() == 0 && state == eSessionReady && now > lastActive
|
||||||
|
&& now - lastActive > (sessionTimeout / 4))
|
||||||
{
|
{
|
||||||
DiscardMessage msg;
|
DiscardMessage msg;
|
||||||
byte_t tmp[128] = {0};
|
byte_t tmp[128] = {0};
|
||||||
|
|
|
@ -158,18 +158,27 @@ bool
|
||||||
llarp_router::SendToOrQueue(const llarp::RouterID &remote,
|
llarp_router::SendToOrQueue(const llarp::RouterID &remote,
|
||||||
const llarp::ILinkMessage *msg)
|
const llarp::ILinkMessage *msg)
|
||||||
{
|
{
|
||||||
llarp::ILinkLayer *chosen = nullptr;
|
|
||||||
|
|
||||||
if(inboundLinks.size() == 0)
|
if(inboundLinks.size() == 0)
|
||||||
chosen = outboundLink.get();
|
|
||||||
else
|
|
||||||
chosen = inboundLinks[0].get();
|
|
||||||
|
|
||||||
if(chosen->HasSessionTo(remote))
|
|
||||||
{
|
{
|
||||||
SendTo(remote, msg, chosen);
|
if(outboundLink->HasSessionTo(remote))
|
||||||
return true;
|
{
|
||||||
|
SendTo(remote, msg, outboundLink.get());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(const auto &link : inboundLinks)
|
||||||
|
{
|
||||||
|
if(link->HasSessionTo(remote))
|
||||||
|
{
|
||||||
|
SendTo(remote, msg, link.get());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// no link available
|
||||||
|
|
||||||
// this will create an entry in the obmq if it's not already there
|
// this will create an entry in the obmq if it's not already there
|
||||||
auto itr = outboundMessageQueue.find(remote);
|
auto itr = outboundMessageQueue.find(remote);
|
||||||
if(itr == outboundMessageQueue.end())
|
if(itr == outboundMessageQueue.end())
|
||||||
|
|
Loading…
Reference in a new issue