simplify periodical executor background routine (#339)

This commit is contained in:
Kevin Wan
2021-01-03 14:02:51 +08:00
committed by GitHub
parent 10e3b8ac80
commit 510e966982

View File

@@ -93,15 +93,12 @@ func (pe *PeriodicalExecutor) Wait() {
func (pe *PeriodicalExecutor) addAndCheck(task interface{}) (interface{}, bool) { func (pe *PeriodicalExecutor) addAndCheck(task interface{}) (interface{}, bool) {
pe.lock.Lock() pe.lock.Lock()
defer func() { defer func() {
var start bool
if !pe.guarded { if !pe.guarded {
pe.guarded = true pe.guarded = true
start = true // defer to unlock quickly
defer pe.backgroundFlush()
} }
pe.lock.Unlock() pe.lock.Unlock()
if start {
pe.backgroundFlush()
}
}() }()
if pe.container.AddTask(task) { if pe.container.AddTask(task) {
@@ -148,14 +145,12 @@ func (pe *PeriodicalExecutor) cleanup() (stop bool) {
pe.guarded = false pe.guarded = false
if atomic.LoadInt32(&pe.inflight) == 0 { if atomic.LoadInt32(&pe.inflight) == 0 {
stop = true stop = true
// defer to unlock quickly
// flush again to avoid missing tasks
defer pe.Flush()
} }
pe.lock.Unlock() pe.lock.Unlock()
if stop {
// flush again to avoid missing tasks
pe.Flush()
}
return return
} }