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()),
|
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 {
|
for err == nil {
|
||||||
streamIndex, packetVal, ok := reflect.Select(cases)
|
streamIndex, packetVal, ok := reflect.Select(cases)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
closedStreamIndex = streamIndex
|
||||||
break // some stream has been closed, just close them all
|
break // some stream has been closed, just close them all
|
||||||
}
|
}
|
||||||
packet := packetVal.Interface().(*gmf.Packet)
|
packet := packetVal.Interface().(*gmf.Packet)
|
||||||
|
@ -113,10 +123,6 @@ func Mux(muxer string, readers ...io.ReadCloser) (retval io.Reader) {
|
||||||
err = output.Ctx.WritePacket(packet)
|
err = output.Ctx.WritePacket(packet)
|
||||||
packet.Release()
|
packet.Release()
|
||||||
}
|
}
|
||||||
log.Println("Bailing out")
|
|
||||||
for _, r := range readers {
|
|
||||||
r.Close()
|
|
||||||
}
|
|
||||||
output.Ctx.WriteTrailer()
|
output.Ctx.WriteTrailer()
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue