store ctx on Bar struct
Vladimir Bauer
1 year, 10 months ago
| 21 | 21 | done chan struct{} |
| 22 | 22 | container *Progress |
| 23 | 23 | bs *bState |
| 24 | ctx context.Context | |
| 24 | 25 | cancel func() |
| 25 | 26 | } |
| 26 | 27 | |
| 71 | 72 | operateState: make(chan func(*bState)), |
| 72 | 73 | done: make(chan struct{}), |
| 73 | 74 | container: container, |
| 75 | ctx: ctx, | |
| 74 | 76 | cancel: cancel, |
| 75 | 77 | } |
| 76 | 78 | |
| 77 | 79 | container.bwg.Add(1) |
| 78 | go bar.serve(ctx, bs) | |
| 80 | go bar.serve(bs) | |
| 79 | 81 | return bar |
| 80 | 82 | } |
| 81 | 83 | |
| 385 | 387 | <-b.done |
| 386 | 388 | } |
| 387 | 389 | |
| 388 | func (b *Bar) serve(ctx context.Context, bs *bState) { | |
| 390 | func (b *Bar) serve(bs *bState) { | |
| 389 | 391 | defer b.container.bwg.Done() |
| 390 | 392 | for { |
| 391 | 393 | select { |
| 392 | 394 | case op := <-b.operateState: |
| 393 | 395 | op(bs) |
| 394 | case <-ctx.Done(): | |
| 396 | case <-b.ctx.Done(): | |
| 395 | 397 | bs.aborted = !bs.completed |
| 396 | 398 | bs.decoratorShutdownNotify() |
| 397 | 399 | b.bs = bs |