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:
parent
7ac151875f
commit
0640633ccc
2
cache.go
2
cache.go
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue