From 6a43f3394c07ff987a99c3d9fbdf9079e25950e9 Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Fri, 22 Oct 2021 23:13:50 +0900 Subject: [PATCH] call dispose on pub and track --- lib/src/participant/local_participant.dart | 7 ++++++- lib/src/participant/remote_participant.dart | 11 ++++++++++- lib/src/track/local_track_publication.dart | 5 +++++ lib/src/track/remote_track_publication.dart | 21 +++++++++++++-------- 4 files changed, 34 insertions(+), 10 deletions(-) diff --git a/lib/src/participant/local_participant.dart b/lib/src/participant/local_participant.dart index 76d8b05..eeba840 100644 --- a/lib/src/participant/local_participant.dart +++ b/lib/src/participant/local_participant.dart @@ -157,7 +157,10 @@ class LocalParticipant extends Participant { Future unpublishTrack(String trackSid, {bool notify = true}) async { logger.finer('Unpublish track sid: $trackSid, notify: $notify'); final pub = trackPublications.remove(trackSid); - if (pub is! LocalTrackPublication) return; + if (pub is! LocalTrackPublication) { + await pub?.dispose(); + return; + } final track = pub.track; if (track != null) { @@ -185,6 +188,8 @@ class LocalParticipant extends Participant { publication: pub, )); } + + await pub.dispose(); } /// Publish a new data payload to the room. diff --git a/lib/src/participant/remote_participant.dart b/lib/src/participant/remote_participant.dart index 8c911aa..837c353 100644 --- a/lib/src/participant/remote_participant.dart +++ b/lib/src/participant/remote_participant.dart @@ -158,7 +158,14 @@ class RemoteParticipant extends Participant { Future unpublishTrack(String trackSid, {bool notify = true}) async { logger.finer('Unpublish track sid: $trackSid, notify: $notify'); final pub = trackPublications.remove(trackSid); - if (pub is! RemoteTrackPublication) return; + + if (pub is! RemoteTrackPublication) { + // no publication exists for trackSid + // or publication is not RemoteTrackPublication + // logger.warning('pub is not RemoteTrackPublication'); + await pub?.dispose(); + return; + } final track = pub.track; // if has track @@ -177,5 +184,7 @@ class RemoteParticipant extends Participant { publication: pub, )); } + + await pub.dispose(); } } diff --git a/lib/src/track/local_track_publication.dart b/lib/src/track/local_track_publication.dart index 629f5a6..3ba6696 100644 --- a/lib/src/track/local_track_publication.dart +++ b/lib/src/track/local_track_publication.dart @@ -15,6 +15,11 @@ class LocalTrackPublication extends TrackPublication { this._participant, ) : super.fromInfo(info) { this.track = track; + // register dispose func + onDispose(() async { + // this object is responsible for disposing track + await track.dispose(); + }); } /// Mute or unmute the current track. When muted, track will stop sending data diff --git a/lib/src/track/remote_track_publication.dart b/lib/src/track/remote_track_publication.dart index fed2d8b..c098af8 100644 --- a/lib/src/track/remote_track_publication.dart +++ b/lib/src/track/remote_track_publication.dart @@ -17,6 +17,19 @@ class RemoteTrackPublication extends TrackPublication { lk_rtc.VideoQuality _videoQuality = lk_rtc.VideoQuality.HIGH; lk_rtc.VideoQuality get videoQuality => _videoQuality; + RemoteTrackPublication( + lk_models.TrackInfo info, + this._participant, [ + Track? track, + ]) : super.fromInfo(info) { + this.track = track; + // register dispose func + onDispose(() async { + // this object is responsible for disposing track + await track?.dispose(); + }); + } + set videoQuality(lk_rtc.VideoQuality val) { if (val == _videoQuality) return; _videoQuality = val; @@ -76,14 +89,6 @@ class RemoteTrackPublication extends TrackPublication { } } - RemoteTrackPublication( - lk_models.TrackInfo info, - this._participant, [ - Track? track, - ]) : super.fromInfo(info) { - this.track = track; - } - void _sendUpdateSubscription({required bool subscribed}) { logger.fine('Sending update subscription... ${sid} ${subscribed}'); final subscription = lk_rtc.UpdateSubscription(