Attempt to reactivate dead paths.

This commit is contained in:
Adam Ierymenko 2016-09-02 13:55:33 -07:00
parent 4f8253dcdb
commit 412979ba8f
2 changed files with 10 additions and 2 deletions

View File

@ -162,7 +162,7 @@ public:
*
* @param now Current time
* @param inetAddressFamily Keep this address family alive, or 0 to simply pick current best ignoring family
* @return True if at least one direct path seems alive
* @return True if we have at least one direct path
*/
bool doPingAndKeepalive(uint64_t now,int inetAddressFamily);

View File

@ -754,7 +754,15 @@ bool Switch::_trySend(const Packet &packet,bool encrypt)
const uint64_t now = RR->node->now();
SharedPtr<Path> viaPath(peer->getBestPath(now));
if ( (!viaPath) || ((!viaPath->alive(now))&&(!RR->topology->isRoot(peer->identity()))) ) {
if ( (viaPath) && (!viaPath->alive(now)) && (!RR->topology->isRoot(peer->identity())) ) {
if ((now - viaPath->lastOut()) > 5000) {
Packet outp(peer->address(),RR->identity.address(),Packet::VERB_ECHO);
outp.armor(peer->key(),true);
viaPath->send(RR,outp.data(),outp.size(),now);
}
viaPath.zero();
}
if (!viaPath) {
SharedPtr<Peer> relay(RR->topology->getBestRoot());
if ( (!relay) || (!(viaPath = relay->getBestPath(now))) )
return false;