some comments for future self
Vladimir Bauer
8 years ago
| 215 | 215 | bf := <-ch |
| 216 | 216 | _, err = s.cw.ReadFrom(bf.reader) |
| 217 | 217 | if !bf.bar.completed && bf.toComplete { |
| 218 | bf.bar.completed = true | |
| 218 | // shutdown at next flush, in other words decrement underlying WaitGroup | |
| 219 | // only after the bar with completed state has been flushed. | |
| 220 | // this ensures no bar ends up with less than 100% rendered. | |
| 221 | defer func() { | |
| 222 | s.shutdownPending = append(s.shutdownPending, bf.bar) | |
| 223 | }() | |
| 219 | 224 | if bf.bar.removeOnComplete { |
| 220 | 225 | s.heapUpdated = heap.Remove(s.bHeap, bf.bar.index) != nil |
| 221 | 226 | } |
| 224 | 229 | s.heapUpdated = true |
| 225 | 230 | delete(s.waitBars, bf.bar) |
| 226 | 231 | } |
| 227 | // defer is required to make removeOnComplete visually happen | |
| 228 | defer func() { | |
| 229 | s.shutdownPending = append(s.shutdownPending, bf.bar) | |
| 230 | }() | |
| 232 | bf.bar.completed = true | |
| 231 | 233 | } |
| 232 | 234 | } |
| 233 | 235 | |