Codebase list golang-github-vbauerster-mpb / 4b59059
address issue #136 enable renderReq only after delayRC has been fired Vladimir Bauer 2 years ago
1 changed file(s) with 9 addition(s) and 5 deletion(s). Raw diff Collapse all Expand all
6767 ctx = context.Background()
6868 }
6969 ctx, cancel := context.WithCancel(ctx)
70 delayRC := make(chan struct{}, 1)
71 delayRC <- struct{}{}
7072 s := &pState{
7173 ctx: ctx,
7274 hm: make(heapManager),
7375 dropS: make(chan struct{}),
7476 dropD: make(chan struct{}),
7577 renderReq: make(chan time.Time),
78 popPriority: math.MinInt32,
7679 refreshRate: defaultRefreshRate,
77 popPriority: math.MinInt32,
80 delayRC: delayRC,
7881 queueBars: make(map[*Bar]*Bar),
7982 output: os.Stdout,
8083 debugOut: io.Discard,
259262 defer p.pwg.Done()
260263 render := func() error { return s.render(cw) }
261264 var err error
265 var renderReq <-chan time.Time
262266
263267 for {
264268 select {
266270 op(s)
267271 case fn := <-p.interceptIO:
268272 fn(cw)
269 case <-s.renderReq:
273 case <-s.delayRC:
274 renderReq = s.renderReq
275 s.delayRC = nil
276 case <-renderReq:
270277 e := render()
271278 if e != nil {
272279 p.cancel() // cancel all bars
293300 }
294301
295302 func (s pState) autoRefreshListener(done chan struct{}) {
296 if s.delayRC != nil {
297 <-s.delayRC
298 }
299303 ticker := time.NewTicker(s.refreshRate)
300304 defer ticker.Stop()
301305 for {