render wrapper
setting refreshCh to nil may potentially dead lock
so instead just override render wrapper on error.
Vladimir Bauer
3 years ago
| 254 | 254 | func (p *Progress) serve(s *pState, cw *cwriter.Writer) { |
| 255 | 255 | defer p.cwg.Done() |
| 256 | 256 | |
| 257 | render := func() error { return s.render(cw) } | |
| 258 | ||
| 257 | 259 | refreshCh := s.newTicker(p.done) |
| 258 | 260 | |
| 259 | 261 | for { |
| 263 | 265 | case fn := <-p.interceptIo: |
| 264 | 266 | fn(cw) |
| 265 | 267 | case <-refreshCh: |
| 266 | err := s.render(cw) | |
| 268 | err := render() | |
| 267 | 269 | if err != nil { |
| 268 | 270 | p.cancel() // cancel all bars |
| 269 | 271 | p.once.Do(p.shutdown) |
| 270 | 272 | s.heapUpdated = false |
| 271 | refreshCh = nil | |
| 273 | render = func() error { return nil } | |
| 272 | 274 | _, _ = fmt.Fprintln(s.debugOut, err) |
| 273 | 275 | } |
| 274 | 276 | case <-s.shutdownNotifier: |