Clean up data track observers on unsubscribe. (#4421)

Media track clean up fixed some leaks. There are more when the
participants thrash. This is not the issue, but doing this to match
media tracks.
This commit is contained in:
Raja Subramanian
2026-04-02 11:55:46 +05:30
committed by GitHub
parent 9674ac48ab
commit 934f8598e2
+8
View File
@@ -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
}