summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Conrad Chen <conradchen@google.com> 2017-06-13 13:02:42 -0700
committer Conrad Chen <conradchen@google.com> 2017-06-22 21:11:04 +0000
commit5265beb6493205fb32c81b7c2b4a9ba447ecfe59 (patch)
tree89dbe3c33b37023eb7c1b16b9f4d0d8fae2bd303
parent7fc2e746855d0b43554a3b278606b487bd1099af (diff)
Media: Eliminate NPE from race conditions
Race conditions may happen between MediaSessionManager.SessionsChangedWrapper.release() and calling onActiveSessionsChanged(), which might cause NPE. Copies member variables as local variables to prevent that. Test: cts-tradefed run cts -m MediaTest Bug: 62841633 Change-Id: I69b6d155a1a5c475ab4bb317b60baa6f3a030e5a
-rw-r--r--media/java/android/media/session/MediaSessionManager.java17
1 files changed, 11 insertions, 6 deletions
diff --git a/media/java/android/media/session/MediaSessionManager.java b/media/java/android/media/session/MediaSessionManager.java
index e02a4dcba9e4..b215825cbfb4 100644
--- a/media/java/android/media/session/MediaSessionManager.java
+++ b/media/java/android/media/session/MediaSessionManager.java
@@ -546,18 +546,23 @@ public final class MediaSessionManager {
private final IActiveSessionsListener.Stub mStub = new IActiveSessionsListener.Stub() {
@Override
public void onActiveSessionsChanged(final List<MediaSession.Token> tokens) {
- if (mHandler != null) {
- mHandler.post(new Runnable() {
+ final Handler handler = mHandler;
+ if (handler != null) {
+ handler.post(new Runnable() {
@Override
public void run() {
- if (mListener != null) {
+ final Context context = mContext;
+ if (context != null) {
ArrayList<MediaController> controllers
= new ArrayList<MediaController>();
int size = tokens.size();
for (int i = 0; i < size; i++) {
- controllers.add(new MediaController(mContext, tokens.get(i)));
+ controllers.add(new MediaController(context, tokens.get(i)));
+ }
+ final OnActiveSessionsChangedListener listener = mListener;
+ if (listener != null) {
+ listener.onActiveSessionsChanged(controllers);
}
- mListener.onActiveSessionsChanged(controllers);
}
}
});
@@ -566,8 +571,8 @@ public final class MediaSessionManager {
};
private void release() {
- mContext = null;
mListener = null;
+ mContext = null;
mHandler = null;
}
}