From fff6f84856120bc28c2fb599f6d0d606dcdbba03 Mon Sep 17 00:00:00 2001 From: cnderrauber Date: Fri, 27 May 2022 15:42:17 +0800 Subject: [PATCH] fix repeated AddSubscriber of MediaTrackSubscription (#723) --- pkg/rtc/mediatracksubscriptions.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pkg/rtc/mediatracksubscriptions.go b/pkg/rtc/mediatracksubscriptions.go index d960d2220..2db9438fb 100644 --- a/pkg/rtc/mediatracksubscriptions.go +++ b/pkg/rtc/mediatracksubscriptions.go @@ -29,9 +29,10 @@ const ( type MediaTrackSubscriptions struct { params MediaTrackSubscriptionsParams - subscribedTracksMu sync.RWMutex - subscribedTracks map[livekit.ParticipantID]types.SubscribedTrack - pendingClose map[livekit.ParticipantID]types.SubscribedTrack + subscribedTracksMu sync.RWMutex + subscribedTracks map[livekit.ParticipantID]types.SubscribedTrack + pendingSubscribeTracks sync.Map // livekit.ParticipantID -> bool + pendingClose map[livekit.ParticipantID]types.SubscribedTrack onNoSubscribers func() @@ -108,6 +109,12 @@ func (t *MediaTrackSubscriptions) AddSubscriber(sub types.LocalParticipant, code trackID := t.params.MediaTrack.ID() subscriberID := sub.ID() + if _, pending := t.pendingSubscribeTracks.LoadOrStore(subscriberID, true); pending { + return nil, nil + } else { + defer t.pendingSubscribeTracks.Delete(subscriberID) + } + // don't subscribe to the same track multiple times t.subscribedTracksMu.Lock() if _, ok := t.subscribedTracks[subscriberID]; ok {