diff --git a/progress.go b/progress.go index 0f91aab..ebc3526 100644 --- a/progress.go +++ b/progress.go @@ -247,6 +247,7 @@ } func (p *Progress) serve(s *pState, cw *cwriter.Writer) { + var err error render := func() error { return s.render(cw) } @@ -262,13 +263,26 @@ case fn := <-p.interceptIo: fn(cw) case <-refreshCh: - err := render() + e := render() + if e != nil { + p.cancel() // cancel all bars + render = func() error { return nil } + err = e + } + case <-p.done: + ch := make(chan bool) + for err == nil { + s.hm.state(ch) + isUnrenderedState := <-ch + if isUnrenderedState { + err = render() + } else { + break + } + } if err != nil { _, _ = fmt.Fprintln(s.debugOut, err.Error()) - render = func() error { return nil } - p.cancel() // cancel all bars - } - case <-p.done: + } s.hm.end(s.shutdownNotifier) close(p.shutdown) return