From 6b2b6ca4799ef7c8a38c86d8ece60e95d70cdfb1 Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Thu, 11 Sep 2014 16:23:13 +0100 Subject: [PATCH] Prevent device provisioning when another device provisioning request is already under process. --- .../android/exoplayer/drm/StreamingDrmSessionManager.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/library/src/main/java/com/google/android/exoplayer/drm/StreamingDrmSessionManager.java b/library/src/main/java/com/google/android/exoplayer/drm/StreamingDrmSessionManager.java index b01955ebaa..e914a8777f 100644 --- a/library/src/main/java/com/google/android/exoplayer/drm/StreamingDrmSessionManager.java +++ b/library/src/main/java/com/google/android/exoplayer/drm/StreamingDrmSessionManager.java @@ -71,6 +71,7 @@ public class StreamingDrmSessionManager implements DrmSessionManager { private Handler postRequestHandler; private int openCount; + private boolean provisioningInProgress; private int state; private MediaCrypto mediaCrypto; private Exception lastException; @@ -179,6 +180,7 @@ public class StreamingDrmSessionManager implements DrmSessionManager { return; } state = STATE_CLOSED; + provisioningInProgress = false; mediaDrmHandler.removeCallbacksAndMessages(null); postResponseHandler.removeCallbacksAndMessages(null); postRequestHandler.removeCallbacksAndMessages(null); @@ -212,11 +214,16 @@ public class StreamingDrmSessionManager implements DrmSessionManager { } private void postProvisionRequest() { + if (provisioningInProgress) { + return; + } + provisioningInProgress = true; ProvisionRequest request = mediaDrm.getProvisionRequest(); postRequestHandler.obtainMessage(MSG_PROVISION, request).sendToTarget(); } private void onProvisionResponse(Object response) { + provisioningInProgress = false; if (state != STATE_OPENING && state != STATE_OPENED && state != STATE_OPENED_WITH_KEYS) { // This event is stale. return;