fix: 修复 timer.GetTicker 在获取到定时器后立刻使用造成的竞态问题

This commit is contained in:
kercylan98 2023-10-27 15:55:23 +08:00
parent d2f982bf42
commit a4bc8280a4
1 changed files with 5 additions and 6 deletions

View File

@ -9,11 +9,7 @@ import (
var timer = new(Timer) var timer = new(Timer)
func GetTicker(size int, options ...Option) *Ticker { func GetTicker(size int, options ...Option) *Ticker {
ticker := timer.NewTicker(size) return timer.NewTicker(size, options...)
for _, option := range options {
option(ticker)
}
return ticker
} }
type Timer struct { type Timer struct {
@ -21,7 +17,7 @@ type Timer struct {
lock sync.Mutex lock sync.Mutex
} }
func (slf *Timer) NewTicker(size int) *Ticker { func (slf *Timer) NewTicker(size int, options ...Option) *Ticker {
slf.lock.Lock() slf.lock.Lock()
defer slf.lock.Unlock() defer slf.lock.Unlock()
@ -37,6 +33,9 @@ func (slf *Timer) NewTicker(size int) *Ticker {
wheel: timingwheel.NewTimingWheel(timingWheelTick, int64(size)), wheel: timingwheel.NewTimingWheel(timingWheelTick, int64(size)),
timers: make(map[string]*Scheduler), timers: make(map[string]*Scheduler),
} }
for _, option := range options {
option(ticker)
}
ticker.wheel.Start() ticker.wheel.Start()
return ticker return ticker
} }