Browse Source

webrtc: fix memory leak during shutdown or session kick (#2079)

pull/2080/head
Alessandro Ros 2 years ago committed by GitHub
parent
commit
473c075d89
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      internal/core/webrtc_http_server.go
  2. 27
      internal/core/webrtc_session.go

4
internal/core/webrtc_http_server.go

@ -358,9 +358,7 @@ func (s *webRTCHTTPServer) onRequest(ctx *gin.Context) { @@ -358,9 +358,7 @@ func (s *webRTCHTTPServer) onRequest(ctx *gin.Context) {
publish: (fname == "whip"),
})
if res.err != nil {
if res.errStatusCode != 0 {
ctx.Writer.WriteHeader(res.errStatusCode)
}
ctx.Writer.WriteHeader(res.errStatusCode)
return
}

27
internal/core/webrtc_session.go

@ -205,12 +205,9 @@ func (s *webRTCSession) runInner() error { @@ -205,12 +205,9 @@ func (s *webRTCSession) runInner() error {
errStatusCode, err := s.runInner2()
if !s.answerSent {
select {
case s.req.res <- webRTCSessionNewRes{
s.req.res <- webRTCSessionNewRes{
err: err,
errStatusCode: errStatusCode,
}:
case <-s.ctx.Done():
}
}
@ -294,10 +291,7 @@ func (s *webRTCSession) runPublish() (int, error) { @@ -294,10 +291,7 @@ func (s *webRTCSession) runPublish() (int, error) {
tmp := pc.LocalDescription()
answer = *tmp
err = s.writeAnswer(&answer)
if err != nil {
return http.StatusBadRequest, err
}
s.writeAnswer(&answer)
go s.readRemoteCandidates(pc)
@ -401,10 +395,7 @@ func (s *webRTCSession) runRead() (int, error) { @@ -401,10 +395,7 @@ func (s *webRTCSession) runRead() (int, error) {
tmp := pc.LocalDescription()
answer = *tmp
err = s.writeAnswer(&answer)
if err != nil {
return http.StatusBadRequest, err
}
s.writeAnswer(&answer)
go s.readRemoteCandidates(pc)
@ -468,18 +459,12 @@ func (s *webRTCSession) waitGatheringDone(pc *peerConnection) error { @@ -468,18 +459,12 @@ func (s *webRTCSession) waitGatheringDone(pc *peerConnection) error {
}
}
func (s *webRTCSession) writeAnswer(answer *webrtc.SessionDescription) error {
select {
case s.req.res <- webRTCSessionNewRes{
func (s *webRTCSession) writeAnswer(answer *webrtc.SessionDescription) {
s.req.res <- webRTCSessionNewRes{
sx: s,
answer: []byte(answer.SDP),
}:
s.answerSent = true
case <-s.ctx.Done():
return fmt.Errorf("terminated")
}
return nil
s.answerSent = true
}
func (s *webRTCSession) waitUntilConnected(pc *peerConnection) error {

Loading…
Cancel
Save