rtsp source: fix memory leak in case source doesn't send H264 params in time

This commit is contained in:
aler9
2022-02-03 09:58:03 +01:00
parent 7c1d329d61
commit f6a5fe2623

View File

@@ -328,19 +328,21 @@ func (s *rtspSource) handleMissingH264Params(c *gortsplib.Client, tracks gortspl
return err return err
} }
waitError := make(chan error) readErr := make(chan error)
go func() { go func() {
waitError <- c.Wait() readErr <- c.Wait()
}() }()
timeout := time.NewTimer(15 * time.Second) timeout := time.NewTimer(15 * time.Second)
defer timeout.Stop() defer timeout.Stop()
select { select {
case err := <-waitError: case err := <-readErr:
return err return err
case <-timeout.C: case <-timeout.C:
c.Close()
<-readErr
return fmt.Errorf("source did not send H264 parameters in time") return fmt.Errorf("source did not send H264 parameters in time")
case <-paramsReceived: case <-paramsReceived:
@@ -354,6 +356,8 @@ func (s *rtspSource) handleMissingH264Params(c *gortsplib.Client, tracks gortspl
tracks: tracks, tracks: tracks,
}) })
if res.err != nil { if res.err != nil {
c.Close()
<-readErr
return res.err return res.err
} }
@@ -368,9 +372,9 @@ func (s *rtspSource) handleMissingH264Params(c *gortsplib.Client, tracks gortspl
defer func() { defer func() {
s.parent.onSourceStaticSetNotReady(pathSourceStaticSetNotReadyReq{source: s}) s.parent.onSourceStaticSetNotReady(pathSourceStaticSetNotReadyReq{source: s})
}() }()
}
return <-waitError return <-readErr
}
} }
// onSourceAPIDescribe implements source. // onSourceAPIDescribe implements source.