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

Commit cc536223 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "MediaPlayer2: fix and move CloseGuard checking to MediaPlayer2"

parents 735381e5 c18e3d39
Loading
Loading
Loading
Loading
+23 −2
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@ import android.os.PersistableBundle;
import android.view.Surface;
import android.view.SurfaceHolder;

import dalvik.system.CloseGuard;

import java.io.FileDescriptor;
import java.io.IOException;
import java.io.InputStream;
@@ -457,6 +459,8 @@ import java.util.concurrent.Executor;
public abstract class MediaPlayer2 implements SubtitleController.Listener
                                            , AutoCloseable
                                            , AudioRouting {
    private final CloseGuard mGuard = CloseGuard.get();

    /**
     * Create a MediaPlayer2 object.
     *
@@ -512,7 +516,9 @@ public abstract class MediaPlayer2 implements SubtitleController.Listener
     * @hide
     */
    // add hidden empty constructor so it doesn't show in SDK
    public MediaPlayer2() { }
    public MediaPlayer2() {
        mGuard.open("close");
    }

    /**
     * Returns a {@link MediaPlayerBase} implementation which runs based on
@@ -545,7 +551,22 @@ public abstract class MediaPlayer2 implements SubtitleController.Listener
     */
    // This is a synchronous call.
    @Override
    public abstract void close();
    public void close() {
        synchronized (mGuard) {
            mGuard.close();
        }
    }

    // Have to declare protected for finalize() since it is protected
    // in the base class Object.
    @Override
    protected void finalize() throws Throwable {
        if (mGuard != null) {
            mGuard.warnIfOpen();
        }

        close();
    }

    /**
     * Starts or resumes playback. If playback had previously been paused,
+11 −14
Original line number Diff line number Diff line
@@ -55,8 +55,6 @@ import com.android.framework.protobuf.InvalidProtocolBufferException;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.Preconditions;

import dalvik.system.CloseGuard;

import libcore.io.IoBridge;

import java.io.ByteArrayOutputStream;
@@ -79,7 +77,6 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.UUID;
import java.util.Vector;
import java.util.concurrent.Executor;
@@ -105,7 +102,6 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
    private boolean mScreenOnWhilePlaying;
    private boolean mStayAwake;
    private int mStreamType = AudioManager.USE_DEFAULT_STREAM_TYPE;
    private final CloseGuard mGuard = CloseGuard.get();

    private final Object mSrcLock = new Object();
    //--- guarded by |mSrcLock| start
@@ -145,6 +141,9 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
    @GuardedBy("mTaskLock")
    private Task mCurrentTask;

    @GuardedBy("this")
    private boolean mReleased;

    /**
     * Default constructor.
     * <p>When done with the MediaPlayer2Impl, you should call  {@link #close()},
@@ -159,7 +158,6 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {

        mTimeProvider = new TimeProvider(this);
        mOpenSubtitleSources = new Vector<InputStream>();
        mGuard.open("close");

        /* Native setup requires a weak reference to our object.
         * It's easier to create it here than in C++.
@@ -197,10 +195,9 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
     */
    @Override
    public void close() {
        synchronized (mGuard) {
        super.close();
        release();
    }
    }

    /**
     * Starts or resumes playback. If playback had previously been paused,
@@ -2447,15 +2444,14 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
    // in the base class Object.
    @Override
    protected void finalize() throws Throwable {
        if (mGuard != null) {
            mGuard.warnIfOpen();
        }

        close();
        super.finalize();
        native_finalize();
    }

    private void release() {
    private synchronized void release() {
        if (mReleased) {
            return;
        }
        stayAwake(false);
        updateSurfaceScreenOn();
        synchronized (mEventCbLock) {
@@ -2478,6 +2474,7 @@ public final class MediaPlayer2Impl extends MediaPlayer2 {
        resetDrmState();

        _release();
        mReleased = true;
    }

    private native void _release();