mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2024-12-22 14:22:23 +00:00
When we reset within scope, erase the other entries for that scope so we won't keep resetting the same scope repeatedly.
This commit is contained in:
parent
18ca6f34ff
commit
40f312a827
@ -105,6 +105,14 @@ void SelfAwareness::iam(const Address &reporter,const InetAddress &reporterPhysi
|
|||||||
entry.ts = now;
|
entry.ts = now;
|
||||||
TRACE("learned physical address %s for scope %u as seen from %s(%s) (replaced %s, resetting all in scope)",myPhysicalAddress.toString().c_str(),(unsigned int)scope,reporter.toString().c_str(),reporterPhysicalAddress.toString().c_str(),entry.mySurface.toString().c_str());
|
TRACE("learned physical address %s for scope %u as seen from %s(%s) (replaced %s, resetting all in scope)",myPhysicalAddress.toString().c_str(),(unsigned int)scope,reporter.toString().c_str(),reporterPhysicalAddress.toString().c_str(),entry.mySurface.toString().c_str());
|
||||||
|
|
||||||
|
// Erase all entries (other than this one) for this scope to prevent thrashing
|
||||||
|
// Note: we should probably not use 'entry' after this
|
||||||
|
for(std::map< PhySurfaceKey,PhySurfaceEntry >::iterator p(_phy.begin());p!=_phy.end();) {
|
||||||
|
if ((p->first.reporter != reporter)&&(p->first.scope == scope))
|
||||||
|
_phy.erase(p++);
|
||||||
|
else ++p;
|
||||||
|
}
|
||||||
|
|
||||||
_ResetWithinScope rset(RR,now,(InetAddress::IpScope)scope);
|
_ResetWithinScope rset(RR,now,(InetAddress::IpScope)scope);
|
||||||
RR->topology->eachPeer<_ResetWithinScope &>(rset);
|
RR->topology->eachPeer<_ResetWithinScope &>(rset);
|
||||||
|
|
||||||
@ -124,7 +132,9 @@ void SelfAwareness::iam(const Address &reporter,const InetAddress &reporterPhysi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else entry.ts = now;
|
} else {
|
||||||
|
entry.ts = now;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelfAwareness::clean(uint64_t now)
|
void SelfAwareness::clean(uint64_t now)
|
||||||
|
Loading…
Reference in New Issue
Block a user