From c65f337cf6406bde76bb5f7eaa824885a243db39 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Wed, 20 Mar 2024 10:06:49 -0400 Subject: [PATCH] fix: protect `nursery` with mutex --- discover/table.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/discover/table.go b/discover/table.go index 41d5ac6..b7ef6b6 100644 --- a/discover/table.go +++ b/discover/table.go @@ -190,7 +190,9 @@ func (tab *Table) setFallbackNodes(nodes []*enode.Node) error { return fmt.Errorf("bad bootstrap node %q: %v", n, err) } } + tab.mutex.Lock() tab.nursery = wrapNodes(nodes) + tab.mutex.Unlock() return nil } @@ -302,7 +304,9 @@ func (tab *Table) doRefresh(done chan struct{}) { func (tab *Table) loadSeedNodes() { seeds := wrapNodes(tab.db.QuerySeeds(seedCount, seedMaxAge)) + tab.mutex.Lock() seeds = append(seeds, tab.nursery...) + tab.mutex.Unlock() for i := range seeds { seed := seeds[i] age := log.Lazy{Fn: func() interface{} { return time.Since(tab.db.LastPongReceived(seed.ID(), seed.IP())) }}