From d1d5bd40d488bc1c7b2c4c1e0cbaa3b7190c87f4 Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Mon, 11 Mar 2024 17:25:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20timer.Ticker=20?= =?UTF-8?q?=E5=B9=B6=E5=8F=91=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/timer/options.go | 6 ++++-- utils/timer/ticker.go | 6 +++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/utils/timer/options.go b/utils/timer/options.go index ea8fb60..255f8c6 100644 --- a/utils/timer/options.go +++ b/utils/timer/options.go @@ -3,9 +3,11 @@ package timer type Option func(ticker *Ticker) // WithCaller 通过其他的 handler 执行 Caller -func WithCaller(handle func(name string, caller func())) Option { +func WithCaller(handler func(name string, caller func())) Option { return func(ticker *Ticker) { - ticker.handler = handle + ticker.lock.Lock() + ticker.handler = handler + ticker.lock.Unlock() } } diff --git a/utils/timer/ticker.go b/utils/timer/ticker.go index ebae57e..c739a12 100644 --- a/utils/timer/ticker.go +++ b/utils/timer/ticker.go @@ -150,7 +150,11 @@ func (slf *Ticker) loop(name string, after, interval time.Duration, expr *cronex slf.timers[name] = scheduler if slf.handler != nil { scheduler.timer = slf.wheel.ScheduleFunc(scheduler, func() { - slf.handler(scheduler.Name(), scheduler.Caller) + slf.lock.RLock() + defer slf.lock.RUnlock() + if slf.handler != nil { + slf.handler(scheduler.Name(), scheduler.Caller) + } }) } else { scheduler.timer = slf.wheel.ScheduleFunc(scheduler, scheduler.Caller)