Fix race condition

- the gc finalize for an object races with the janitor.Run goroutine
- because the janitor.stop channel is created in the Run() goroutine this leads
  to a data race.
- fix by creating the channel when the janitor is created
This commit is contained in:
Vivian Mathews 2017-07-21 14:56:50 -04:00
parent 7ac151875f
commit 0640633ccc
1 changed files with 1 additions and 1 deletions

View File

@ -1074,7 +1074,6 @@ type janitor struct {
} }
func (j *janitor) Run(c *cache) { func (j *janitor) Run(c *cache) {
j.stop = make(chan bool)
ticker := time.NewTicker(j.Interval) ticker := time.NewTicker(j.Interval)
for { for {
select { select {
@ -1094,6 +1093,7 @@ func stopJanitor(c *Cache) {
func runJanitor(c *cache, ci time.Duration) { func runJanitor(c *cache, ci time.Duration) {
j := &janitor{ j := &janitor{
Interval: ci, Interval: ci,
stop: make(chan bool),
} }
c.janitor = j c.janitor = j
go j.Run(c) go j.Run(c)