Browse Source

simplify periodical executor background routine (#339)

Kevin Wan 4 năm trước cách đây
mục cha
commit
510e966982
1 tập tin đã thay đổi với 5 bổ sung10 xóa
  1. 5 10
      core/executors/periodicalexecutor.go

+ 5 - 10
core/executors/periodicalexecutor.go

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