diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 078f53df86..2ace17dc48 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -28,6 +28,10 @@ * Fix bug in `MediaCodecVideoRenderer` that resulted in re-using a released `Surface` when playing without an app-provided `Surface` ([#9476](https://github.com/google/ExoPlayer/issues/9476)). +* DRM: + * Log an error (instead of throwing `IllegalStateException`) when calling + `DefaultDrmSession#release()` on a fully released session + ([#9392](https://github.com/google/ExoPlayer/issues/9392)). * Android 12 compatibility: * Keep `DownloadService` started and in the foreground whilst waiting for requirements to be met on Android 12. This is necessary due to new diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java index 5e5bce8340..fff8ab9e7b 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSession.java @@ -296,7 +296,10 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; @Override public void acquire(@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher) { - checkState(referenceCount >= 0); + if (referenceCount < 0) { + Log.e(TAG, "Session reference count less than zero: " + referenceCount); + referenceCount = 0; + } if (eventDispatcher != null) { eventDispatchers.add(eventDispatcher); } @@ -320,7 +323,10 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; @Override public void release(@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher) { - checkState(referenceCount > 0); + if (referenceCount <= 0) { + Log.e(TAG, "release() called on a session that's already fully released."); + return; + } if (--referenceCount == 0) { // Assigning null to various non-null variables for clean-up. state = STATE_RELEASED;