From fd228a383c0844d69da952460145b1aa3e00ffd7 Mon Sep 17 00:00:00 2001 From: RoboErik Date: Thu, 4 Dec 2014 09:41:25 -0800 Subject: [PATCH] Make setting the session token in MediaBrowserService synchronous The MusicDemo was depending on the fact that setting the session token is done synchronously and that getSessionToken can be called immediately after. This makes setting the token synchronous again but leaves the post to update any MediaBrowsers that are waiting on a connection. This does introduce a small race condition if an app tries to set it twice from different threads, but this is a very unlikely situation and MediaBrowserService is not guaranteed to be thread safe. bug:18603085 Change-Id: Id934c9f3b6520225cd92d1d8a6e2b3d606b8c6c8 --- .../android/service/media/MediaBrowserService.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/media/java/android/service/media/MediaBrowserService.java b/media/java/android/service/media/MediaBrowserService.java index 779d4864f6a10..26aedbd26a999 100644 --- a/media/java/android/service/media/MediaBrowserService.java +++ b/media/java/android/service/media/MediaBrowserService.java @@ -323,24 +323,22 @@ public abstract class MediaBrowserService extends Service { *

* This should be called as soon as possible during the service's startup. * It may only be called once. - * - * @return The media session token, must not be null. */ public void setSessionToken(final MediaSession.Token token) { if (token == null) { throw new IllegalArgumentException("Session token may not be null."); } + if (mSession != null) { + throw new IllegalStateException("The session token has already been set."); + } + mSession = token; mHandler.post(new Runnable() { @Override public void run() { - if (mSession != null) { - throw new IllegalStateException("The session token has already been set."); - } - mSession = token; for (IBinder key : mConnections.keySet()) { ConnectionRecord connection = mConnections.get(key); try { - connection.callbacks.onConnect(connection.root.getRootId(), mSession, + connection.callbacks.onConnect(connection.root.getRootId(), token, connection.root.getExtras()); } catch (RemoteException e) { Log.w(TAG, "Connection for " + connection.pkg + " is no longer valid.");