Fix bailout after muxing when an input stream has closed.
parent
67cf9afdd3
commit
1ba8f0df54
|
@ -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()
|
||||
}()
|
||||
|
||||
|
|
Loading…
Reference in New Issue