p2p/discover: simplify rand timer

This commit is contained in:
Felix Lange 2024-04-20 10:09:38 +02:00
parent c1afb3c0cc
commit 7667ebfceb
2 changed files with 6 additions and 14 deletions

View file

@ -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 {

View file

@ -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():