Codebase list golang-github-vbauerster-mpb / f1ce3dd
handle err in (*Progress).serve in case of error cancel all bars and shutdown Vladimir Bauer 3 years ago
1 changed file(s) with 15 addition(s) and 16 deletion(s). Raw diff Collapse all Expand all
239239 func (p *Progress) serve(s *pState, cw *cwriter.Writer) {
240240 defer p.cwg.Done()
241241
242 render := func(out io.Writer) {
243 err := s.render(cw)
244 for err != nil {
245 if out != nil {
246 _, err = fmt.Fprintln(out, err)
247 } else {
248 panic(err)
249 }
250 out = nil
251 }
252 }
253
254 p.refreshCh = s.newTicker(p.done)
242 refreshCh := s.newTicker(p.done)
255243
256244 for {
257245 select {
259247 op(s)
260248 case fn := <-p.interceptIo:
261249 fn(cw)
262 case <-p.refreshCh:
263 render(s.debugOut)
250 case <-refreshCh:
251 err := s.render(cw)
252 if err != nil {
253 p.cancel() // cancel all bars
254 p.once.Do(p.shutdown)
255 s.heapUpdated = false
256 refreshCh = nil
257 _, _ = fmt.Fprintln(s.debugOut, err)
258 }
264259 case <-s.shutdownNotifier:
265260 for s.heapUpdated {
266 render(s.debugOut)
261 err := s.render(cw)
262 if err != nil {
263 _, _ = fmt.Fprintln(s.debugOut, err)
264 return
265 }
267266 }
268267 return
269268 }