Merge pull request #16226 from aaronlehmann/broadcaster-catch-up
Broadcaster writer goroutines must only finish when they are caught up
This commit is contained in:
commit
3f268f7166
1 changed files with 7 additions and 3 deletions
|
@ -77,6 +77,12 @@ func (broadcaster *Broadcaster) receiveWrites(observer io.Writer) {
|
||||||
|
|
||||||
broadcaster.Lock()
|
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
|
// detect closure of the broadcast writer
|
||||||
if broadcaster.closed() {
|
if broadcaster.closed() {
|
||||||
broadcaster.Unlock()
|
broadcaster.Unlock()
|
||||||
|
@ -84,9 +90,7 @@ func (broadcaster *Broadcaster) receiveWrites(observer io.Writer) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(broadcaster.history) == n {
|
broadcaster.cond.Wait()
|
||||||
broadcaster.cond.Wait()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mutex is still locked as the loop continues
|
// Mutex is still locked as the loop continues
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue