Codebase list golang-github-vbauerster-mpb / d078269
refactoring render error handling Vladimir Bauer 2 years ago
1 changed file(s) with 13 addition(s) and 6 deletion(s). Raw diff Collapse all Expand all
260260
261261 func (p *Progress) serve(s *pState, cw *cwriter.Writer) {
262262 defer p.pwg.Done()
263 render := func() error { return s.render(cw) }
264263 var err error
265264 var renderReq <-chan time.Time
266265
274273 renderReq = s.renderReq
275274 s.delayRC = nil
276275 case <-renderReq:
277 e := render()
278 if e != nil {
276 err = s.render(cw)
277 if err != nil {
278 go func() {
279 for {
280 select {
281 case <-s.renderReq:
282 case <-p.done:
283 return
284 }
285 }
286 }()
279287 p.cancel() // cancel all bars
280 render = func() error { return nil }
281 err = e
288 renderReq = nil
282289 }
283290 case <-p.done:
284291 update := make(chan bool)
285292 for s.autoRefresh && err == nil {
286293 s.hm.state(update)
287294 if <-update {
288 err = render()
295 err = s.render(cw)
289296 } else {
290297 break
291298 }