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