diff --git a/bar.go b/bar.go index d8cb6a8..2b57c1b 100644 --- a/bar.go +++ b/bar.go @@ -52,6 +52,7 @@ filler BarFiller middleware func(BarFiller) BarFiller extender extenderFunc + refreshCh chan interface{} wait struct { bar *Bar // key for (*pState).queueBars @@ -184,7 +185,7 @@ if s.current >= s.total { s.current = s.total s.completed = true - go b.forceRefresh() + go b.forceRefresh(s.refreshCh) } else { s.triggerComplete = true } @@ -212,7 +213,7 @@ if triggerCompleteNow { s.current = s.total s.completed = true - go b.forceRefresh() + go b.forceRefresh(s.refreshCh) } }: case <-b.done: @@ -229,7 +230,7 @@ if s.triggerComplete && s.current >= s.total { s.current = s.total s.completed = true - go b.forceRefresh() + go b.forceRefresh(s.refreshCh) } }: case <-b.done: @@ -258,7 +259,7 @@ if s.triggerComplete && s.current >= s.total { s.current = s.total s.completed = true - go b.forceRefresh() + go b.forceRefresh(s.refreshCh) } }: case <-b.done: @@ -318,7 +319,7 @@ } s.aborted = true s.dropOnComplete = drop - go b.forceRefresh() + go b.forceRefresh(s.refreshCh) }: case <-b.done: } @@ -403,7 +404,7 @@ } } -func (b *Bar) forceRefresh() { +func (b *Bar) forceRefresh(refreshCh chan interface{}) { var anyOtherRunning bool b.container.traverseBars(func(bar *Bar) bool { anyOtherRunning = b != bar && bar.IsRunning() @@ -412,7 +413,7 @@ if !anyOtherRunning { for { select { - case b.container.refreshCh <- time.Now(): + case refreshCh <- time.Now(): time.Sleep(prr) case <-b.done: return diff --git a/progress.go b/progress.go index 5e3e134..fff2e4a 100644 --- a/progress.go +++ b/progress.go @@ -427,11 +427,12 @@ func (s *pState) makeBarState(total int64, filler BarFiller, options ...BarOption) *bState { bs := &bState{ - id: s.idCount, - priority: s.idCount, - reqWidth: s.reqWidth, - total: total, - filler: filler, + id: s.idCount, + priority: s.idCount, + reqWidth: s.reqWidth, + total: total, + filler: filler, + refreshCh: s.externalRefresh, } if total > 0 {