diff options
| author | 2017-06-13 13:02:42 -0700 | |
|---|---|---|
| committer | 2017-06-22 21:11:04 +0000 | |
| commit | 5265beb6493205fb32c81b7c2b4a9ba447ecfe59 (patch) | |
| tree | 89dbe3c33b37023eb7c1b16b9f4d0d8fae2bd303 | |
| parent | 7fc2e746855d0b43554a3b278606b487bd1099af (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.java | 17 |
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; } } |