summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorVineeta Srivastava <vsrivastava@google.com>2015-03-11 21:29:32 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-03-11 21:29:33 +0000
commit88b456640085fa0e92d66e42ddaf24449c8c4fdb (patch)
tree4748650073a1802b6a59fbeb5e1720a737a0f408 /media
parent366d92e0b2732406fff4153f6d3d0f7de50a425b (diff)
parent330c8e3ff98e4cb78dad28bbacdb127da3e265ac (diff)
downloadframeworks_av-88b456640085fa0e92d66e42ddaf24449c8c4fdb.zip
frameworks_av-88b456640085fa0e92d66e42ddaf24449c8c4fdb.tar.gz
frameworks_av-88b456640085fa0e92d66e42ddaf24449c8c4fdb.tar.bz2
Merge "libmediaplayerservice: fix deadlock in dump()"
Diffstat (limited to 'media')
-rw-r--r--media/libmediaplayerservice/MediaPlayerService.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 3a399af..f113e21 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -442,6 +442,9 @@ status_t MediaPlayerService::dump(int fd, const Vector<String16>& args)
const size_t SIZE = 256;
char buffer[SIZE];
String8 result;
+ SortedVector< sp<Client> > clients; //to serialise the mutex unlock & client destruction.
+ SortedVector< sp<MediaRecorderClient> > mediaRecorderClients;
+
if (checkCallingPermission(String16("android.permission.DUMP")) == false) {
snprintf(buffer, SIZE, "Permission Denial: "
"can't dump MediaPlayerService from pid=%d, uid=%d\n",
@@ -453,6 +456,7 @@ status_t MediaPlayerService::dump(int fd, const Vector<String16>& args)
for (int i = 0, n = mClients.size(); i < n; ++i) {
sp<Client> c = mClients[i].promote();
if (c != 0) c->dump(fd, args);
+ clients.add(c);
}
if (mMediaRecorderClients.size() == 0) {
result.append(" No media recorder client\n\n");
@@ -465,6 +469,7 @@ status_t MediaPlayerService::dump(int fd, const Vector<String16>& args)
write(fd, result.string(), result.size());
result = "\n";
c->dump(fd, args);
+ mediaRecorderClients.add(c);
}
}
}