Codebase list golang-github-vbauerster-mpb / 338bdd9
Wait for flushed in render Vladimir Bauer 9 years ago
1 changed file(s) with 44 addition(s) and 20 deletion(s). Raw diff Collapse all Expand all
8585 prependFuncs []DecoratorFunc
8686 simpleSpinner func() byte
8787 refill *refill
88 flushed chan struct{}
88 // flushed chan struct{}
8989 }
9090 )
9191
150150 }
151151 select {
152152 case b.ops <- func(s *state) {
153 defer func() {
154 if s.completed {
155 b.Complete()
156 }
157 s.blockStartTime = time.Now()
158 }()
159153 if s.current == 0 {
160154 s.startTime = time.Now()
161155 s.blockStartTime = s.startTime
169163 return
170164 }
171165 s.current = sum
166 s.blockStartTime = time.Now()
172167 }:
173168 case <-b.done:
174169 return
257252 }
258253 }
259254
260 // func (b *Bar) getState() state {
261 // result := make(chan state, 1)
262 // select {
263 // case b.ops <- func(s *state) { result <- *s }:
264 // return <-result
265 // case <-b.done:
266 // return b.state
267 // }
268 // }
269
270255 func (b *Bar) server(s state, wg *sync.WaitGroup, cancel <-chan struct{}) {
271256
272257 defer func() {
273258 b.state = s
274 close(b.done)
275 <-s.flushed
259 // <-s.flushed
276260 // fmt.Fprintf(os.Stderr, "Bar:%d flushed\n", s.id)
277261 wg.Done()
262 close(b.done)
278263 }()
279264
280265 for {
291276 }
292277 }
293278 }
279
280 // func (b *Bar) render(tw int, flushed chan struct{}, prependWs, appendWs *widthSync) <-chan []byte {
281 // ch := make(chan []byte)
282
283 // go func() {
284 // defer func() {
285 // // recovering if external decorators panic
286 // if p := recover(); p != nil {
287 // ch <- []byte(fmt.Sprintln(p))
288 // }
289 // close(ch)
290 // }()
291 // result := make(chan []byte, 1)
292 // select {
293 // case b.ops <- func(s *state) {
294 // buf := draw(s, tw, prependWs, appendWs)
295 // buf = append(buf, '\n')
296 // result <- buf
297 // // wait for flushed
298 // if s.completed {
299 // <-flushed
300 // b.Complete()
301 // }
302 // }:
303 // ch <- <-result
304 // case <-b.done:
305 // buf := draw(&b.state, tw, prependWs, appendWs)
306 // buf = append(buf, '\n')
307 // ch <- buf
308 // default:
309 // ch <- []byte{}
310 // }
311 // }()
312
313 // return ch
314 // }
294315
295316 func (b *Bar) render(tw int, flushed chan struct{}, prependWs, appendWs *widthSync) <-chan []byte {
296317 ch := make(chan []byte)
307328 result := make(chan state, 1)
308329 select {
309330 case b.ops <- func(s *state) {
310 s.flushed = flushed
311331 result <- *s
332 if s.completed {
333 <-flushed
334 b.Complete()
335 }
312336 }:
313337 st = <-result
314338 case <-b.done: