This commit is contained in:
Sahil Sojitra 2026-02-24 21:56:18 -08:00 committed by GitHub
commit 2cc41c116b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -245,28 +245,33 @@ func (tab *Table) refresh() <-chan struct{} {
// preferLive is true and the table contains any verified nodes, the result will not
// contain unverified nodes. However, if there are no verified nodes at all, the result
// will contain unverified nodes.
func (tab *Table) findnodeByID(target enode.ID, nresults int, preferLive bool) *nodesByDistance {
func (tab *Table) findnodeByID(target enode.ID, nresults int, preferLive bool) (nodes nodesByDistance) {
nodes.target = target
tab.mutex.Lock()
defer tab.mutex.Unlock()
// Scan all buckets. There might be a better way to do this, but there aren't that many
// buckets, so this solution should be fine. The worst-case complexity of this loop
// is O(tab.len() * nresults).
nodes := &nodesByDistance{target: target}
liveNodes := &nodesByDistance{target: target}
for _, b := range &tab.buckets {
for _, n := range b.entries {
nodes.push(n.Node, nresults)
if preferLive && n.isValidatedLive {
liveNodes.push(n.Node, nresults)
if preferLive {
for _, b := range &tab.buckets {
for _, n := range b.entries {
if n.isValidatedLive {
nodes.push(n.Node, nresults)
}
}
}
if len(nodes.entries) > 0 {
return
}
}
if preferLive && len(liveNodes.entries) > 0 {
return liveNodes
for _, b := range &tab.buckets {
for _, n := range b.entries {
nodes.push(n.Node, nresults)
}
}
return nodes
return
}
// appendBucketNodes adds nodes at the given distance to the result slice.