summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dongwon Kang <dwkang@google.com> 2018-10-01 13:55:42 -0700
committer Dongwon Kang <dwkang@google.com> 2018-10-02 15:37:51 -0700
commitc18e3d39cb355687a2fb8f0bca7e1b2b86de8545 (patch)
tree5e1617e12eb553eeed0945fd1db4b570f1f580be
parent05e2992a74817d8eb41ce439397dd0124bfb2b0b (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.java25
-rw-r--r--media/java/android/media/MediaPlayer2Impl.java25
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();