progress: make sure all channels have written before returning

Possible write on closed channel on cancellation before.

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
Tonis Tiigi
2020-10-16 22:49:29 -07:00
parent 232af9aa0d
commit 40fad4bbb5
4 changed files with 13 additions and 5 deletions

View File

@ -39,16 +39,18 @@ func Write(w Writer, name string, f func() error) {
})
}
func NewChannel(w Writer) chan *client.SolveStatus {
func NewChannel(w Writer) (chan *client.SolveStatus, chan struct{}) {
ch := make(chan *client.SolveStatus)
done := make(chan struct{})
go func() {
for {
v, ok := <-ch
if !ok {
close(done)
return
}
w.Write(v)
}
}()
return ch
return ch, done
}