pass &wg to decoratorAverageAdjust
Vladimir Bauer
1 year, 10 months ago
| 314 | 314 | // if you need to adjust start time of all average based decorators |
| 315 | 315 | // or after progress resume. |
| 316 | 316 | func (b *Bar) DecoratorAverageAdjust(start time.Time) { |
| 317 | select { | |
| 318 | case b.operateState <- func(s *bState) { s.decoratorAverageAdjust(start) }: | |
| 317 | result := make(chan *sync.WaitGroup) | |
| 318 | select { | |
| 319 | case b.operateState <- func(s *bState) { | |
| 320 | var wg sync.WaitGroup | |
| 321 | s.decoratorAverageAdjust(start, &wg) | |
| 322 | result <- &wg | |
| 323 | }: | |
| 324 | wg := <-result | |
| 325 | wg.Wait() | |
| 319 | 326 | case <-b.ctx.Done(): |
| 320 | 327 | } |
| 321 | 328 | } |
| 564 | 571 | wg.Wait() |
| 565 | 572 | } |
| 566 | 573 | |
| 567 | func (s bState) decoratorAverageAdjust(start time.Time) { | |
| 568 | var wg sync.WaitGroup | |
| 574 | func (s bState) decoratorAverageAdjust(start time.Time, wg *sync.WaitGroup) { | |
| 569 | 575 | for i := 0; i < len(s.averageDecorators); i++ { |
| 576 | wg.Add(1) | |
| 570 | 577 | switch d := s.averageDecorators[i]; i { |
| 571 | 578 | case len(s.averageDecorators) - 1: |
| 572 | 579 | d.AverageAdjust(start) |
| 580 | wg.Done() | |
| 573 | 581 | default: |
| 574 | wg.Add(1) | |
| 575 | 582 | go func() { |
| 576 | 583 | d.AverageAdjust(start) |
| 577 | 584 | wg.Done() |
| 578 | 585 | }() |
| 579 | 586 | } |
| 580 | 587 | } |
| 581 | wg.Wait() | |
| 582 | 588 | } |
| 583 | 589 | |
| 584 | 590 | func (s bState) decoratorShutdownNotify(wg *sync.WaitGroup) { |