diff options
| author | 2018-10-01 13:55:42 -0700 | |
|---|---|---|
| committer | 2018-10-02 15:37:51 -0700 | |
| commit | c18e3d39cb355687a2fb8f0bca7e1b2b86de8545 (patch) | |
| tree | 5e1617e12eb553eeed0945fd1db4b570f1f580be | |
| parent | 05e2992a74817d8eb41ce439397dd0124bfb2b0b (diff) | |
MediaPlayer2: fix and move CloseGuard checking to MediaPlayer2
Test: build and boot
Bug: 112767549
Change-Id: I4e50f06c919e6666a08ba177bf9eb578fc224409
| -rw-r--r-- | media/java/android/media/MediaPlayer2.java | 25 | ||||
| -rw-r--r-- | media/java/android/media/MediaPlayer2Impl.java | 25 |
2 files changed, 34 insertions, 16 deletions
diff --git a/media/java/android/media/MediaPlayer2.java b/media/java/android/media/MediaPlayer2.java index 7492aa605dc6..0f83fd5803de 100644 --- a/media/java/android/media/MediaPlayer2.java +++ b/media/java/android/media/MediaPlayer2.java @@ -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, diff --git a/media/java/android/media/MediaPlayer2Impl.java b/media/java/android/media/MediaPlayer2Impl.java index dfcbabeea4f3..1b86ff9443f3 100644 --- a/media/java/android/media/MediaPlayer2Impl.java +++ b/media/java/android/media/MediaPlayer2Impl.java @@ -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,9 +195,8 @@ public final class MediaPlayer2Impl extends MediaPlayer2 { */ @Override public void close() { - synchronized (mGuard) { - release(); - } + super.close(); + release(); } /** @@ -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(); |