From 126046be2366afde97fdf01d0dceece2977dd6d6 Mon Sep 17 00:00:00 2001 From: Frank Schroeder Date: Thu, 19 Oct 2017 11:11:57 +0200 Subject: [PATCH] ae: restore previous pause/resume behavior --- agent/ae/ae.go | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/agent/ae/ae.go b/agent/ae/ae.go index 4ec72ed469..e20d918391 100644 --- a/agent/ae/ae.go +++ b/agent/ae/ae.go @@ -77,7 +77,7 @@ type StateSyncer struct { // paused stores whether sync runs are temporarily disabled. pauseLock sync.Mutex - paused bool + paused int } func NewStateSyner(state State, intv time.Duration, shutdownCh chan struct{}, logger *log.Logger) *StateSyncer { @@ -180,7 +180,7 @@ FullSync: func (s *StateSyncer) ifNotPausedRun(f func() error) error { s.pauseLock.Lock() defer s.pauseLock.Unlock() - if s.paused { + if s.paused != 0 { return errPaused } return f() @@ -189,10 +189,7 @@ func (s *StateSyncer) ifNotPausedRun(f func() error) error { // Pause temporarily disables sync runs. func (s *StateSyncer) Pause() { s.pauseLock.Lock() - if s.paused { - panic("pause while paused") - } - s.paused = true + s.paused++ s.pauseLock.Unlock() } @@ -200,16 +197,18 @@ func (s *StateSyncer) Pause() { func (s *StateSyncer) Paused() bool { s.pauseLock.Lock() defer s.pauseLock.Unlock() - return s.paused + return s.paused != 0 } // Resume re-enables sync runs. func (s *StateSyncer) Resume() { s.pauseLock.Lock() - if !s.paused { - panic("resume while not paused") + s.paused-- + if s.paused < 0 { + panic("unbalanced pause/resume") + } + if s.paused == 0 { + s.SyncChanges.Trigger() } - s.paused = false s.pauseLock.Unlock() - s.SyncChanges.Trigger() }