From b2cb93d9a441364f22dbf071851383149ae208bd Mon Sep 17 00:00:00 2001 From: cnderrauber Date: Tue, 25 Jan 2022 16:13:52 +0800 Subject: [PATCH] fix concurrency problem (#369) --- pkg/rtc/mediatrack.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkg/rtc/mediatrack.go b/pkg/rtc/mediatrack.go index 5ae117ec0..1888a7b04 100644 --- a/pkg/rtc/mediatrack.go +++ b/pkg/rtc/mediatrack.go @@ -48,6 +48,8 @@ type MediaTrack struct { *MediaTrackReceiver onMediaLossUpdate func(trackID livekit.TrackID, fractionalLoss uint32) + + lock sync.RWMutex } type MediaTrackParams struct { @@ -204,6 +206,7 @@ func (t *MediaTrack) AddReceiver(receiver *webrtc.RTPReceiver, track *webrtc.Tra } }) + t.lock.Lock() if t.Receiver() == nil { wr := sfu.NewWebRTCReceiver( receiver, @@ -226,6 +229,7 @@ func (t *MediaTrack) AddReceiver(receiver *webrtc.RTPReceiver, track *webrtc.Tra t.MediaTrackReceiver.SetupReceiver(wr) } + t.lock.Unlock() t.Receiver().(*sfu.WebRTCReceiver).AddUpTrack(track, buff) t.params.Telemetry.AddUpTrack(t.PublisherID(), t.ID(), buff)