From 7667ebfcebdd6941e49b9b169d675c48f7fdaa8d Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sat, 20 Apr 2024 10:09:38 +0200 Subject: [PATCH] p2p/discover: simplify rand timer --- p2p/discover/common.go | 10 ++-------- p2p/discover/table.go | 10 ++++------ 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/p2p/discover/common.go b/p2p/discover/common.go index 8b024231b7..18eb94c71b 100644 --- a/p2p/discover/common.go +++ b/p2p/discover/common.go @@ -104,20 +104,14 @@ type randomSource interface { // reseedingRandom is a random number generator that tracks when it was last re-seeded. type reseedingRandom struct { - cur atomic.Pointer[rand.Rand] - lastSeed mclock.AbsTime + cur atomic.Pointer[rand.Rand] } -func (r *reseedingRandom) nextReseedTime() mclock.AbsTime { - return r.lastSeed.Add(10 * time.Minute) -} - -func (r *reseedingRandom) seed(now mclock.AbsTime) { +func (r *reseedingRandom) seed() { var b [8]byte crand.Read(b[:]) seed := binary.BigEndian.Uint64(b[:]) r.cur.Store(rand.New(rand.NewSource(int64(seed)))) - r.lastSeed = now } func (r *reseedingRandom) Intn(n int) int { diff --git a/p2p/discover/table.go b/p2p/discover/table.go index fbcf02019b..68ce499ebf 100644 --- a/p2p/discover/table.go +++ b/p2p/discover/table.go @@ -135,7 +135,7 @@ func newTable(t transport, db *enode.DB, cfg Config) (*Table, error) { ips: netutil.DistinctNetSet{Subnet: bucketSubnet, Limit: bucketIPLimit}, } } - tab.rand.seed(cfg.Clock.Now()) + tab.rand.seed() tab.revalidation.init(&cfg) // initial table content @@ -337,7 +337,7 @@ func (tab *Table) loop() { refreshDone = make(chan struct{}) // where doRefresh reports completion waiting = []chan struct{}{tab.initDone} // holds waiting callers while doRefresh runs revalTimer = mclock.NewAlarm(tab.cfg.Clock) - reseedRandTimer = mclock.NewAlarm(tab.cfg.Clock) + reseedRandTimer = time.NewTicker(10 * time.Minute) ) defer refresh.Stop() defer revalTimer.Stop() @@ -351,11 +351,9 @@ loop: nextTime := tab.revalidation.run(tab, tab.cfg.Clock.Now()) revalTimer.Schedule(nextTime) - reseedRandTimer.Schedule(tab.rand.nextReseedTime()) - select { - case <-reseedRandTimer.C(): - tab.rand.seed(tab.cfg.Clock.Now()) + case <-reseedRandTimer.C: + tab.rand.seed() case <-revalTimer.C():