clean up node info immediately if it reaches the timeout or if it needs refreshing but won't be pinged due to being unimportant

This commit is contained in:
Arceliar 2018-12-21 17:45:24 -06:00
parent f59852b1e1
commit 59093aa43b

View File

@ -325,7 +325,15 @@ func (t *dht) doMaintenance() {
} }
t.callbacks = newCallbacks t.callbacks = newCallbacks
for infoID, info := range t.table { for infoID, info := range t.table {
if now.Sub(info.recv) > dht_timeout || info.pings > 6 { switch {
case info.pings > 6:
// It failed to respond to too many pings
fallthrough
case now.Sub(info.recv) > dht_timeout:
// It's too old
fallthrough
case info.dirty && now.Sub(info.recv) > dht_max_delay_dirty && !t.isImportant(info):
// We won't ping it to refresh it, so just drop it
delete(t.table, infoID) delete(t.table, infoID)
t.imp = nil t.imp = nil
} }