Fix bailout after muxing when an input stream has closed.

burst
Icedream 2018-04-10 16:01:14 +02:00
parent 67cf9afdd3
commit 1ba8f0df54
Signed by: icedream
GPG Key ID: C1D30A06E6490C14
1 changed files with 10 additions and 4 deletions

View File

@ -103,9 +103,19 @@ func Mux(muxer string, readers ...io.ReadCloser) (retval io.Reader) {
Chan: reflect.ValueOf(c.Ctx.GetNewPackets()),
}
}
var closedStreamIndex = 0
defer func() {
for i, r := range readers {
if i == closedStreamIndex {
continue
}
r.Close()
}
}()
for err == nil {
streamIndex, packetVal, ok := reflect.Select(cases)
if !ok {
closedStreamIndex = streamIndex
break // some stream has been closed, just close them all
}
packet := packetVal.Interface().(*gmf.Packet)
@ -113,10 +123,6 @@ func Mux(muxer string, readers ...io.ReadCloser) (retval io.Reader) {
err = output.Ctx.WritePacket(packet)
packet.Release()
}
log.Println("Bailing out")
for _, r := range readers {
r.Close()
}
output.Ctx.WriteTrailer()
}()