Browse Source

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

pull/846/head
aler9 5 years ago
parent
commit
f6a5fe2623
  1. 14
      internal/core/rtsp_source.go

14
internal/core/rtsp_source.go

@ -328,19 +328,21 @@ func (s *rtspSource) handleMissingH264Params(c *gortsplib.Client, tracks gortspl @@ -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 @@ -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 @@ -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.

Loading…
Cancel
Save