mirror of
https://github.com/livekit/livekit.git
synced 2026-05-18 13:26:11 +00:00
Remove subscriber if track closed while adding subscriber. (#2537)
* Remove subscriber if track closed while adding subscriber. It is possible that the track is closed when subscriber add is processed. That subscriber would have been dangling off a closed track. Check again after adding subscriber if track is closed. If it is, remove the subscriber and return error so that subscription manager re-resolves. * oops, wrong unlock
This commit is contained in:
@@ -102,6 +102,7 @@ type MediaTrackReceiver struct {
|
||||
trackInfo *livekit.TrackInfo
|
||||
potentialCodecs []webrtc.RTPCodecParameters
|
||||
state mediaTrackReceiverState
|
||||
willBeResumed bool
|
||||
|
||||
onSetupReceiver func(mime string)
|
||||
onMediaLossFeedback func(dt *sfu.DownTrack, report *rtcp.ReceiverReport)
|
||||
@@ -275,6 +276,8 @@ func (t *MediaTrackReceiver) ClearAllReceivers(willBeResumed bool) {
|
||||
t.lock.Lock()
|
||||
receivers := t.receivers
|
||||
t.receivers = nil
|
||||
|
||||
t.willBeResumed = willBeResumed
|
||||
t.lock.Unlock()
|
||||
|
||||
for _, r := range receivers {
|
||||
@@ -482,7 +485,24 @@ func (t *MediaTrackReceiver) AddSubscriber(sub types.LocalParticipant) (types.Su
|
||||
Logger: tLogger,
|
||||
DisableRed: t.trackInfo.GetDisableRed() || !t.params.AudioConfig.ActiveREDEncoding,
|
||||
})
|
||||
return t.MediaTrackSubscriptions.AddSubscriber(sub, wr)
|
||||
subTrack, err := t.MediaTrackSubscriptions.AddSubscriber(sub, wr)
|
||||
|
||||
// media track could have been closed while adding subscription
|
||||
remove := false
|
||||
willBeResumed := false
|
||||
t.lock.RLock()
|
||||
if t.state != mediaTrackReceiverStateOpen {
|
||||
willBeResumed = t.willBeResumed
|
||||
remove = true
|
||||
}
|
||||
t.lock.RUnlock()
|
||||
|
||||
if remove {
|
||||
_ = t.MediaTrackSubscriptions.RemoveSubscriber(sub.ID(), willBeResumed)
|
||||
return nil, ErrNotOpen
|
||||
}
|
||||
|
||||
return subTrack, err
|
||||
}
|
||||
|
||||
// RemoveSubscriber removes participant from subscription
|
||||
|
||||
Reference in New Issue
Block a user