From 1ba8f0df54cacb3ce08c38b2a83c80e8bd16b6cc Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Tue, 10 Apr 2018 16:01:14 +0200 Subject: [PATCH] Fix bailout after muxing when an input stream has closed. --- internal/media/muxer.go | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/internal/media/muxer.go b/internal/media/muxer.go index 9d5e667..c3822d8 100644 --- a/internal/media/muxer.go +++ b/internal/media/muxer.go @@ -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() }()