diff --git a/pkg/rtc/subscriptionmanager.go b/pkg/rtc/subscriptionmanager.go index 1512fc0b3..c7bf3e485 100644 --- a/pkg/rtc/subscriptionmanager.go +++ b/pkg/rtc/subscriptionmanager.go @@ -119,11 +119,16 @@ func (m *SubscriptionManager) Close(isExpectedToResume bool) { // this participant and its transports to be garbage collected. m.lock.Lock() subs := maps.Clone(m.subscriptions) + dataTrackSubs := maps.Clone(m.dataTrackSubscriptions) m.lock.Unlock() for _, sub := range subs { sub.setChangedNotifier(nil) sub.setRemovedNotifier(nil) } + for _, dataTrackSub := range dataTrackSubs { + dataTrackSub.setChangedNotifier(nil) + dataTrackSub.setRemovedNotifier(nil) + } subTracks := m.GetSubscribedTracks() downTracksToClose := make([]*sfu.DownTrack, 0, len(subTracks)) @@ -1098,6 +1103,9 @@ func (m *SubscriptionManager) unsubscribeDataTrack(s *dataTrackSubscription) err dataTrack := dataDownTrack.PublishDataTrack() dataTrack.RemoveSubscriber(s.subscriberID) + s.setChangedNotifier(nil) + s.setRemovedNotifier(nil) + m.unmarkSubscribedTo(s.getPublisherID(), s.trackID) return nil }