mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Check referenceCount > 0 in DefaultDrmSession#release()
Also flip DefaultDrmSessionManager#prepare()/release() into guard
clauses.
Suggestions from review comments on:
316f8a88cd
PiperOrigin-RevId: 320572462
This commit is contained in:
parent
3214851fbb
commit
6624c7cb9a
@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.google.android.exoplayer2.drm;
|
||||
|
||||
import static com.google.android.exoplayer2.util.Assertions.checkState;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.media.NotProvisionedException;
|
||||
import android.os.Handler;
|
||||
@ -272,12 +274,12 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
||||
|
||||
@Override
|
||||
public void acquire(@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher) {
|
||||
Assertions.checkState(referenceCount >= 0);
|
||||
checkState(referenceCount >= 0);
|
||||
if (eventDispatcher != null) {
|
||||
eventDispatchers.add(eventDispatcher);
|
||||
}
|
||||
if (++referenceCount == 1) {
|
||||
Assertions.checkState(state == STATE_OPENING);
|
||||
checkState(state == STATE_OPENING);
|
||||
requestHandlerThread = new HandlerThread("ExoPlayer:DrmRequestHandler");
|
||||
requestHandlerThread.start();
|
||||
requestHandler = new RequestHandler(requestHandlerThread.getLooper());
|
||||
@ -295,6 +297,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
||||
|
||||
@Override
|
||||
public void release(@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher) {
|
||||
checkState(referenceCount > 0);
|
||||
if (--referenceCount == 0) {
|
||||
// Assigning null to various non-null variables for clean-up.
|
||||
state = STATE_RELEASED;
|
||||
|
@ -440,26 +440,28 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
|
||||
|
||||
@Override
|
||||
public final void prepare() {
|
||||
if (prepareCallsCount++ == 0) {
|
||||
Assertions.checkState(exoMediaDrm == null);
|
||||
exoMediaDrm = exoMediaDrmProvider.acquireExoMediaDrm(uuid);
|
||||
exoMediaDrm.setOnEventListener(new MediaDrmEventListener());
|
||||
if (prepareCallsCount++ != 0) {
|
||||
return;
|
||||
}
|
||||
Assertions.checkState(exoMediaDrm == null);
|
||||
exoMediaDrm = exoMediaDrmProvider.acquireExoMediaDrm(uuid);
|
||||
exoMediaDrm.setOnEventListener(new MediaDrmEventListener());
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void release() {
|
||||
if (--prepareCallsCount == 0) {
|
||||
// Make a local copy, because sessions are removed from this.sessions during release (via
|
||||
// callback).
|
||||
List<DefaultDrmSession> sessions = new ArrayList<>(this.sessions);
|
||||
for (int i = 0; i < sessions.size(); i++) {
|
||||
// Release all the keepalive acquisitions.
|
||||
sessions.get(i).release(/* eventDispatcher= */ null);
|
||||
}
|
||||
Assertions.checkNotNull(exoMediaDrm).release();
|
||||
exoMediaDrm = null;
|
||||
if (--prepareCallsCount != 0) {
|
||||
return;
|
||||
}
|
||||
// Make a local copy, because sessions are removed from this.sessions during release (via
|
||||
// callback).
|
||||
List<DefaultDrmSession> sessions = new ArrayList<>(this.sessions);
|
||||
for (int i = 0; i < sessions.size(); i++) {
|
||||
// Release all the keepalive acquisitions.
|
||||
sessions.get(i).release(/* eventDispatcher= */ null);
|
||||
}
|
||||
Assertions.checkNotNull(exoMediaDrm).release();
|
||||
exoMediaDrm = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
x
Reference in New Issue
Block a user