Skip to content

Commit

Permalink
fix: 移除 modular.go 中不必要的代码,修复 timer.Ticker 释放后 handler 指针污染的问题
Browse files Browse the repository at this point in the history
  • Loading branch information
kercylan98 committed Mar 8, 2024
1 parent f7c3701 commit 17cdad2
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 11 deletions.
3 changes: 0 additions & 3 deletions modular/modular.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package modular
import (
"fmt"
"github.com/kercylan98/minotaur/utils/log"
"reflect"
"sync"
)

Expand All @@ -27,14 +26,12 @@ func (m *modular) RegisterServices(s ...Service) {
func Run() {
m := application
var names = make(map[string]bool)
var tvm = make(map[reflect.Type]reflect.Value)
for i := 0; i < len(m.registerServices); i++ {
s := newService(m.registerServices[i])
if names[s.name] {
panic(fmt.Errorf("service %s is already registered", s.name))
}
names[s.name] = true
tvm[s.vof.Type()] = s.vof
m.services = append(m.services, s)
}

Expand Down
4 changes: 2 additions & 2 deletions utils/timer/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ package timer

type Option func(ticker *Ticker)

// WithCaller 通过其他的 handle 执行 Caller
// WithCaller 通过其他的 handler 执行 Caller
func WithCaller(handle func(name string, caller func())) Option {
return func(ticker *Ticker) {
ticker.handle = handle
ticker.handler = handle
}
}

Expand Down
13 changes: 7 additions & 6 deletions utils/timer/ticker.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ type Ticker struct {
timers map[string]*Scheduler
lock sync.RWMutex

handle func(name string, caller func())
mark string
handler func(name string, caller func())
mark string
}

// Mark 获取定时器的标记
Expand All @@ -33,6 +33,7 @@ func (slf *Ticker) Release() {

slf.lock.Lock()
slf.mark = ""
slf.handler = nil
for name, scheduler := range slf.timers {
scheduler.close()
delete(slf.timers, name)
Expand Down Expand Up @@ -94,8 +95,8 @@ func (slf *Ticker) CronByInstantly(name, expression string, handleFunc interface
f := reflect.ValueOf(handleFunc)
slf.lock.RLock()
defer slf.lock.RUnlock()
if slf.handle != nil {
slf.handle(name, func() {
if slf.handler != nil {
slf.handler(name, func() {
f.Call(values)
})
} else {
Expand Down Expand Up @@ -147,9 +148,9 @@ func (slf *Ticker) loop(name string, after, interval time.Duration, expr *cronex

slf.lock.Lock()
slf.timers[name] = scheduler
if slf.handle != nil {
if slf.handler != nil {
scheduler.timer = slf.wheel.ScheduleFunc(scheduler, func() {
slf.handle(scheduler.Name(), scheduler.Caller)
slf.handler(scheduler.Name(), scheduler.Caller)
})
} else {
scheduler.timer = slf.wheel.ScheduleFunc(scheduler, scheduler.Caller)
Expand Down

0 comments on commit 17cdad2

Please sign in to comment.