mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-02-21 02:01:22 +00:00
Fix duplicate paths and reduce thrashing issues.
This commit is contained in:
parent
b2b3271a96
commit
72d48da210
@ -128,12 +128,15 @@ void Peer::received(
|
||||
long replacePathQuality = 0;
|
||||
for(unsigned int i=0;i<ZT_MAX_PEER_NETWORK_PATHS;++i) {
|
||||
if (_paths[i].p) {
|
||||
const long q = _paths[i].p->quality(now);
|
||||
if (q > replacePathQuality) {
|
||||
replacePathQuality = q;
|
||||
if ( (!_paths[i].p->alive(now)) || _paths[i].p->address().ipsEqual(path->address()) ) {
|
||||
replacePath = i;
|
||||
if ( (!_paths[i].p->alive(now)) || _paths[i].p->address().ipsEqual(path->address()) )
|
||||
break;
|
||||
break;
|
||||
} else {
|
||||
const long q = _paths[i].p->quality(now);
|
||||
if (q > replacePathQuality) {
|
||||
replacePathQuality = q;
|
||||
replacePath = i;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
replacePath = i;
|
||||
@ -147,10 +150,26 @@ void Peer::received(
|
||||
_paths[replacePath].p = path;
|
||||
_paths[replacePath].priority = 1;
|
||||
}
|
||||
|
||||
{
|
||||
Mutex::Lock ltl(_lastTriedPath_m);
|
||||
uint64_t *k = (uint64_t *)0;
|
||||
int64_t *v = (int64_t *)0;
|
||||
Hashtable< uint64_t,int64_t >::Iterator i(_lastTriedPath);
|
||||
while (i.next(k, v)) {
|
||||
if ((now - *v) >= 2000)
|
||||
_lastTriedPath.erase(*k);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
attemptToContactAt(tPtr,path->localSocket(),path->address(),now,true);
|
||||
path->sent(now);
|
||||
RR->t->peerConfirmingUnknownPath(tPtr,networkId,*this,path,packetId,verb);
|
||||
Mutex::Lock ltl(_lastTriedPath_m);
|
||||
int64_t < = _lastTriedPath[(uint64_t)path.ptr()];
|
||||
if ((now - lt) >= 2000) {
|
||||
lt = now;
|
||||
attemptToContactAt(tPtr,path->localSocket(),path->address(),now,true);
|
||||
path->sent(now);
|
||||
RR->t->peerConfirmingUnknownPath(tPtr,networkId,*this,path,packetId,verb);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -573,6 +573,9 @@ private:
|
||||
uint16_t _vMinor;
|
||||
uint16_t _vRevision;
|
||||
|
||||
Hashtable< uint64_t, int64_t > _lastTriedPath;
|
||||
Mutex _lastTriedPath_m;
|
||||
|
||||
_PeerPath _paths[ZT_MAX_PEER_NETWORK_PATHS];
|
||||
Mutex _paths_m;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user