Przeglądaj źródła

Merge pull request #16226 from aaronlehmann/broadcaster-catch-up

Broadcaster writer goroutines must only finish when they are caught up
Brian Goff 9 lat temu
rodzic
commit
7064fe283f
1 zmienionych plików z 7 dodań i 3 usunięć
  1. 7 3
      pkg/progressreader/broadcaster.go

+ 7 - 3
pkg/progressreader/broadcaster.go

@@ -77,6 +77,12 @@ func (broadcaster *Broadcaster) receiveWrites(observer io.Writer) {
 
 		broadcaster.Lock()
 
+		// If we are behind, we need to catch up instead of waiting
+		// or handling a closure.
+		if len(broadcaster.history) != n {
+			continue
+		}
+
 		// detect closure of the broadcast writer
 		if broadcaster.closed() {
 			broadcaster.Unlock()
@@ -84,9 +90,7 @@ func (broadcaster *Broadcaster) receiveWrites(observer io.Writer) {
 			return
 		}
 
-		if len(broadcaster.history) == n {
-			broadcaster.cond.Wait()
-		}
+		broadcaster.cond.Wait()
 
 		// Mutex is still locked as the loop continues
 	}