From 1a31faaeeec27526ca116e1bbac772d2b5a1e29c Mon Sep 17 00:00:00 2001 From: bachinger Date: Mon, 14 Feb 2022 20:05:19 +0000 Subject: [PATCH] Reset stream manager in AdsLoader.release() This prevents a stack trace that is shown in the logs when the stream manager is released after the activity was stopped. In this case the call to `streamManager.destroy()` coming from `releaseSourceInternal()` of the media source is too late and produces an error saying `Application attempted to call on a destroyed WebView`. The error has no effect but it's nice to not have this stack trace in the logs. PiperOrigin-RevId: 428574231 --- .../ima/ImaServerSideAdInsertionMediaSource.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java b/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java index 17120843e0..0e04bb4903 100644 --- a/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java +++ b/libraries/exoplayer_ima/src/main/java/androidx/media3/exoplayer/ima/ImaServerSideAdInsertionMediaSource.java @@ -295,23 +295,31 @@ public final class ImaServerSideAdInsertionMediaSource extends CompositeMediaSou for (MediaSourceResourceHolder resourceHolder : mediaSourceResources.values()) { resourceHolder.streamPlayer.release(); resourceHolder.adsLoader.release(); + resourceHolder.imaServerSideAdInsertionMediaSource.setStreamManager( + /* streamManager= */ null); } mediaSourceResources.clear(); + player = null; } /* package */ void addMediaSourceResources( ImaServerSideAdInsertionMediaSource mediaSource, StreamPlayer streamPlayer, com.google.ads.interactivemedia.v3.api.AdsLoader adsLoader) { - mediaSourceResources.put(mediaSource, new MediaSourceResourceHolder(streamPlayer, adsLoader)); + mediaSourceResources.put( + mediaSource, new MediaSourceResourceHolder(mediaSource, streamPlayer, adsLoader)); } private static final class MediaSourceResourceHolder { + public final ImaServerSideAdInsertionMediaSource imaServerSideAdInsertionMediaSource; public final StreamPlayer streamPlayer; public final com.google.ads.interactivemedia.v3.api.AdsLoader adsLoader; private MediaSourceResourceHolder( - StreamPlayer streamPlayer, com.google.ads.interactivemedia.v3.api.AdsLoader adsLoader) { + ImaServerSideAdInsertionMediaSource imaServerSideAdInsertionMediaSource, + StreamPlayer streamPlayer, + com.google.ads.interactivemedia.v3.api.AdsLoader adsLoader) { + this.imaServerSideAdInsertionMediaSource = imaServerSideAdInsertionMediaSource; this.streamPlayer = streamPlayer; this.adsLoader = adsLoader; }