OSDN Git Service

DO NOT MERGE MediaPlayerService: avoid invalid static cast
authorRobert Shih <robertshih@google.com>
Tue, 16 Aug 2016 23:50:54 +0000 (16:50 -0700)
committerRobert Shih <robertshih@google.com>
Wed, 17 Aug 2016 22:17:34 +0000 (15:17 -0700)
Bug: 30204103
Change-Id: Ie0dd3568a375f1e9fed8615ad3d85184bcc99028

media/libmediaplayerservice/MediaPlayerService.cpp
media/libmediaplayerservice/MediaPlayerService.h

index 9ac9105..4866e19 100644 (file)
@@ -497,6 +497,12 @@ void MediaPlayerService::removeClient(wp<Client> client)
     mClients.remove(client);
 }
 
+bool MediaPlayerService::hasClient(wp<Client> client)
+{
+    Mutex::Autolock lock(mLock);
+    return mClients.indexOf(client) != NAME_NOT_FOUND;
+}
+
 MediaPlayerService::Client::Client(
         const sp<MediaPlayerService>& service, pid_t pid,
         int32_t connId, const sp<IMediaPlayerClient>& client,
@@ -926,6 +932,10 @@ status_t MediaPlayerService::Client::setNextPlayer(const sp<IMediaPlayer>& playe
     ALOGV("setNextPlayer");
     Mutex::Autolock l(mLock);
     sp<Client> c = static_cast<Client*>(player.get());
+    if (!mService->hasClient(c)) {
+      return BAD_VALUE;
+    }
+
     mNextClient = c;
 
     if (c != NULL) {
index 9c084e1..55bf3cd 100644 (file)
@@ -276,6 +276,7 @@ public:
             const char *host, int32_t port, const char *exclusionList);
 
             void                removeClient(wp<Client> client);
+            bool                hasClient(wp<Client> client);
 
     // For battery usage tracking purpose
     struct BatteryUsageInfo {