Skip to content

Commit 1744e4e

Browse files
committed
util/slowset: fix data race
Reported by `go test -race`. Also use time.Ticker to response faster to stopCh. Fixes: 99cf66f
1 parent 29c857e commit 1744e4e

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

pkg/util/slowset.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,18 +81,25 @@ func (s *SlowSet) TimeRemaining(key string) time.Duration {
8181
return 0
8282
}
8383

84+
func (s *SlowSet) removeAllExpired() {
85+
s.Lock()
86+
defer s.Unlock()
87+
for key, t := range s.workSet {
88+
if time.Since(t) > s.retentionTime {
89+
delete(s.workSet, key)
90+
}
91+
}
92+
}
93+
8494
func (s *SlowSet) Run(stopCh <-chan struct{}) {
95+
ticker := time.NewTicker(s.resyncPeriod)
96+
defer ticker.Stop()
8597
for {
8698
select {
8799
case <-stopCh:
88100
return
89-
default:
90-
time.Sleep(s.resyncPeriod)
91-
for key, t := range s.workSet {
92-
if time.Since(t) > s.retentionTime {
93-
s.Remove(key)
94-
}
95-
}
101+
case <-ticker.C:
102+
s.removeAllExpired()
96103
}
97104
}
98105
}

0 commit comments

Comments
 (0)