diff options
author | Jean-Michel Trivi <jmtrivi@google.com> | 2018-04-10 14:06:07 -0700 |
---|---|---|
committer | Jean-Michel Trivi <jmtrivi@google.com> | 2018-04-11 17:22:59 -0700 |
commit | 76e124bcd3ee2e5ba98dcbdb99965a4c133fe7e4 (patch) | |
tree | 3652aec979992b85381635ad82088b9cd8eede92 /tools/aapt2/java/JavaClassGenerator_test.cpp | |
parent | 42c686861c76f49cc5dd97335b9308224dc2cab5 (diff) |
PlayerBase: fix deadlock
Source of deadlock between PlayerBase.mLock and
PlaybackActivityMonitor.mPlayerLock:
android.media.MediaPlayer.release()
> android.media.PlayerBase.baseRelease()
> synchronized (mLock)
> com.android.server.audio.PlaybackActivityMonitor.releasePlayer()
> synchronized(mPlayerLock)
and:
com.android.server.audio.PlaybackActivityMonitor.unmutePlayersForCall()
> synchronized (mPlayerLock)
> android.media.PlayerProxy.setVolume()
> android.media.PlayerBase$IPlayerWrapper.setVolume()
> android.media.PlayerBase.baseSetVolume()
> synchronized (mLock)
playerSetVolume()
Since system_server can have its own players, the calls to
AudioService from PlayerBase can be synchronous, hence the
deadlock.
The fix consists in never holding the lock in PlayerBase
while calling into AudioService.
Refactor the playstate update into a method used for
start / stop / pause.
Bug: 72294559
Test: see bug
Change-Id: I6451aa3bf19a0365472ba007b116a9e6151ab33e
Diffstat (limited to 'tools/aapt2/java/JavaClassGenerator_test.cpp')
0 files changed, 0 insertions, 0 deletions