summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice
diff options
context:
space:
mode:
authorErik Wolsheimer <ewol@google.com>2015-10-30 12:07:52 -0700
committerErik Wolsheimer <ewol@google.com>2015-10-30 12:07:52 -0700
commit7845a1f0790a1de9e26e99578f6ce3219cf8efc3 (patch)
tree1d9f0f145f690b31b03cbeacfdcbfbab0c6c3481 /media/libmediaplayerservice
parent06195062e6b65b342b70cb1299ff278340eba9ff (diff)
downloadframeworks_av-7845a1f0790a1de9e26e99578f6ce3219cf8efc3.zip
frameworks_av-7845a1f0790a1de9e26e99578f6ce3219cf8efc3.tar.gz
frameworks_av-7845a1f0790a1de9e26e99578f6ce3219cf8efc3.tar.bz2
fix deadlock in MediaPlayerService
BUG: 25263909 Change-Id: I3f08c02a851b67ab269e9aef7b2fb17eda09ea5d
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r--media/libmediaplayerservice/MediaPlayerService.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index bcfd83a..f0baf69 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -1894,8 +1894,13 @@ void MediaPlayerService::AudioOutput::pause()
void MediaPlayerService::AudioOutput::close()
{
ALOGV("close");
- Mutex::Autolock lock(mLock);
- close_l();
+ sp<AudioTrack> track;
+ {
+ Mutex::Autolock lock(mLock);
+ track = mTrack;
+ close_l(); // clears mTrack
+ }
+ // destruction of the track occurs outside of mutex.
}
void MediaPlayerService::AudioOutput::setVolume(float left, float right)