Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c08905bd authored by Robert Shih's avatar Robert Shih
Browse files

MediaPlayer2: clear MediaDrm objects upon close/reset

Bug: 112555913
Test: MediaPlayer2DrmTest
Change-Id: I3b60b0d8df4ae3273e17527975c154c80713b328
parent 4d1a60d7
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -63,6 +63,8 @@ import java.net.URL;
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
@@ -408,6 +410,7 @@ public class MediaPlayer2 implements AutoCloseable
        synchronized (mDrmEventCallbackLock) {
            mDrmEventCallback = null;
        }
        clearMediaDrmObjects();

        native_release();

@@ -418,6 +421,16 @@ public class MediaPlayer2 implements AutoCloseable
        mReleased = true;
    }

    void clearMediaDrmObjects() {
        Collection<MediaDrm> drmObjs = mDrmObjs.values();
        synchronized (mDrmObjs) {
            for (MediaDrm drmObj : drmObjs) {
                drmObj.close();
            }
            mDrmObjs.clear();
        }
    }

    private native void native_release();

    // Have to declare protected for finalize() since it is protected
@@ -442,6 +455,7 @@ public class MediaPlayer2 implements AutoCloseable
    // This is a synchronous call.
    public void reset() {
        clearSourceInfos();
        clearMediaDrmObjects();

        stayAwake(false);
        native_reset();
@@ -4504,7 +4518,7 @@ public class MediaPlayer2 implements AutoCloseable
    };

    // Modular DRM
    private final Map<UUID, MediaDrm> mDrmObjs = new HashMap<>();
    private final Map<UUID, MediaDrm> mDrmObjs = Collections.synchronizedMap(new HashMap<>());
    private class DrmHandle {

        static final int PROVISION_TIMEOUT_MS = 60000;
@@ -4891,10 +4905,6 @@ public class MediaPlayer2 implements AutoCloseable
                mDrmObj.closeSession(mDrmSessionId);
                mDrmSessionId = null;
            }
            if (mDrmObj != null) {
                mDrmObj.close();
                mDrmObj = null;
            }
        }

        void release() throws NoDrmSchemeException {