Codebase list golang-github-vbauerster-mpb / b7cecb4
handle frame.err in flush Vladimir Bauer 3 years ago
1 changed file(s) with 17 addition(s) and 14 deletion(s). Raw diff Collapse all Expand all
291291 return s.flush(cw, height)
292292 }
293293
294 func (s *pState) flush(cw *cwriter.Writer, height int) error {
294 func (s *pState) flush(cw *cwriter.Writer, height int) (err error) {
295295 var wg sync.WaitGroup
296296 var popCount int
297297
298298 for s.bHeap.Len() > 0 {
299 var usedRows int
300299 b := heap.Pop(&s.bHeap).(*Bar)
301300 frame := <-b.frameCh
302 if frame.recovered {
303 s.heapUpdated = true
301 if frame.err != nil {
302 if err == nil {
303 err = frame.err
304 }
304305 continue
305306 }
307 var usedRows int
306308 for i := len(frame.rows) - 1; i >= 0; i-- {
307309 if row := frame.rows[i]; len(s.rows) < height {
308310 s.rows = append(s.rows, row)
340342 s.pool = append(s.pool, b)
341343 }
342344
345 if err != nil {
346 return err
347 }
348
343349 wg.Add(1)
344350 go func() {
345351 for _, b := range s.pool {
348354 wg.Done()
349355 }()
350356
351 readRows := len(s.rows)
352 for i := readRows - 1; i >= 0; i-- {
357 for i := len(s.rows) - 1; i >= 0; i-- {
353358 _, err := cw.ReadFrom(s.rows[i])
354359 if err != nil {
355 if s.debugOut != nil {
356 fmt.Fprintf(s.debugOut, "cw.ReadFrom: %s\n", err.Error())
357 }
358 readRows--
359 }
360 }
361
362 err := cw.Flush(readRows - popCount)
360 wg.Wait()
361 return err
362 }
363 }
364
365 err = cw.Flush(len(s.rows) - popCount)
363366 wg.Wait()
364367 s.rows = s.rows[:0]
365368 s.pool = s.pool[:0]