From af23609d472881b8e312e91f2eee0db7252719b5 Mon Sep 17 00:00:00 2001 From: Alessandro Ros Date: Sun, 23 Jul 2023 18:40:06 +0200 Subject: [PATCH] api: fix crash when calling /v1/webrtcsessions/list just after session creation (#2097) --- internal/core/webrtc_manager.go | 2 +- internal/core/webrtc_session.go | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/internal/core/webrtc_manager.go b/internal/core/webrtc_manager.go index 79684b0f..696ad8b2 100644 --- a/internal/core/webrtc_manager.go +++ b/internal/core/webrtc_manager.go @@ -269,7 +269,7 @@ outer: sx := newWebRTCSession( m.ctx, m.readBufferCount, - req.remoteAddr, + req, &wg, m.iceHostNAT1To1IPs, m.iceUDPMux, diff --git a/internal/core/webrtc_session.go b/internal/core/webrtc_session.go index 96f0a7f8..6bbbce37 100644 --- a/internal/core/webrtc_session.go +++ b/internal/core/webrtc_session.go @@ -113,6 +113,7 @@ type webRTCSessionPathManager interface { type webRTCSession struct { readBufferCount int + req webRTCSessionNewReq wg *sync.WaitGroup iceHostNAT1To1IPs []string iceUDPMux ice.UDPMux @@ -125,7 +126,6 @@ type webRTCSession struct { created time.Time uuid uuid.UUID secret uuid.UUID - req webRTCSessionNewReq answerSent bool mutex sync.RWMutex pc *peerConnection @@ -137,7 +137,7 @@ type webRTCSession struct { func newWebRTCSession( parentCtx context.Context, readBufferCount int, - remoteAddr string, + req webRTCSessionNewReq, wg *sync.WaitGroup, iceHostNAT1To1IPs []string, iceUDPMux ice.UDPMux, @@ -149,6 +149,7 @@ func newWebRTCSession( s := &webRTCSession{ readBufferCount: readBufferCount, + req: req, wg: wg, iceHostNAT1To1IPs: iceHostNAT1To1IPs, iceUDPMux: iceUDPMux, @@ -164,7 +165,7 @@ func newWebRTCSession( chAddCandidates: make(chan webRTCSessionAddCandidatesReq), } - s.Log(logger.Info, "created by %s", remoteAddr) + s.Log(logger.Info, "created by %s", req.remoteAddr) wg.Add(1) go s.run() @@ -195,8 +196,8 @@ func (s *webRTCSession) run() { func (s *webRTCSession) runInner() error { select { - case req := <-s.chNew: - s.req = req + case <-s.chNew: + // do not store the request, we already have it case <-s.ctx.Done(): return fmt.Errorf("terminated")