diff options
author | Vineeta Srivastava <vsrivastava@google.com> | 2015-03-11 21:29:32 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-03-11 21:29:33 +0000 |
commit | 88b456640085fa0e92d66e42ddaf24449c8c4fdb (patch) | |
tree | 4748650073a1802b6a59fbeb5e1720a737a0f408 /media | |
parent | 366d92e0b2732406fff4153f6d3d0f7de50a425b (diff) | |
parent | 330c8e3ff98e4cb78dad28bbacdb127da3e265ac (diff) | |
download | frameworks_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.cpp | 5 |
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); } } } |