From f6a5fe2623a40a5d2a6bc1574deca836e4f5609e Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Thu, 3 Feb 2022 09:58:03 +0100 Subject: [PATCH] rtsp source: fix memory leak in case source doesn't send H264 params in time --- internal/core/rtsp_source.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/internal/core/rtsp_source.go b/internal/core/rtsp_source.go index 96f82c1e..12711b7f 100644 --- a/internal/core/rtsp_source.go +++ b/internal/core/rtsp_source.go @@ -328,19 +328,21 @@ func (s *rtspSource) handleMissingH264Params(c *gortsplib.Client, tracks gortspl return err } - waitError := make(chan error) + readErr := make(chan error) go func() { - waitError <- c.Wait() + readErr <- c.Wait() }() timeout := time.NewTimer(15 * time.Second) defer timeout.Stop() select { - case err := <-waitError: + case err := <-readErr: return err case <-timeout.C: + c.Close() + <-readErr return fmt.Errorf("source did not send H264 parameters in time") case <-paramsReceived: @@ -354,6 +356,8 @@ func (s *rtspSource) handleMissingH264Params(c *gortsplib.Client, tracks gortspl tracks: tracks, }) if res.err != nil { + c.Close() + <-readErr return res.err } @@ -368,9 +372,9 @@ func (s *rtspSource) handleMissingH264Params(c *gortsplib.Client, tracks gortspl defer func() { s.parent.onSourceStaticSetNotReady(pathSourceStaticSetNotReadyReq{source: s}) }() - } - return <-waitError + return <-readErr + } } // onSourceAPIDescribe implements source.