summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorDongwon Kang <dwkang@google.com>2015-06-16 15:28:17 -0700
committerDongwon Kang <dwkang@google.com>2015-06-17 15:37:50 -0700
commita38e1f4ed997bea3cbfbf8094a52c23570d59d2a (patch)
tree12c13f805feb71d70e87d59e256b03ee120c6332 /media
parent2d4dc8db64d0f75e530451acb2c0bea97b9264ff (diff)
downloadframeworks_base-a38e1f4ed997bea3cbfbf8094a52c23570d59d2a.zip
frameworks_base-a38e1f4ed997bea3cbfbf8094a52c23570d59d2a.tar.gz
frameworks_base-a38e1f4ed997bea3cbfbf8094a52c23570d59d2a.tar.bz2
Make MediaSessionService not blocked by AudioService.
Backgroud: As noted in b/20823981, MediaSessionService calls some audio service methods while holding a lock and the audio service methods also talk to other system services. And, deadlock happens when the other system service fires another request to MediaSessionService while holding its lock. Example1) --- resolved by the change in MediaSessionRecord.java T1: MediaSessionService.dispatchAdjustVolumeLocked() -> MediaSessionRecord.adjustVolume() -> +++AudioServiceInternal.adjustSuggestedStreamVolumeForUid()+++ -> AudioService.adjustSuggestedStreamVolume() -> telecom.TelecomManager.isInCall() --- blocked by lock in TelecomManager. T2: telecom.ConnectionServiceWrapper.handleCreateConnectionComplete() -> MediaSession.setActive() -> MediaSessionRecord$SessionStub.setActive() -> MediaSessionService.updateSession() --- blocked by lock in MediaSessionService. Example2) --- resolved by the change in IAudioService.aidl T1: MediaSessionService.dispatchAdjustVolumeLocked() -> IAudioService.adjustSuggestedStreamVolume() -> AudioService.adjustSuggestedStreamVolume() -> telecom.TelecomManager.isInCall() --- blocked by lock in TelecomManager. T2: telecom.ConnectionServiceWrapper.handleCreateConnectionComplete() -> MediaSession.setActive() -> MediaSessionRecord$SessionStub.setActive() -> MediaSessionService.updateSession() --- blocked by lock in MediaSessionService. Here, this change prevents the deadlock by making related audio IPC oneway and calling the internal audio method without holding the lock. Bug: 20823981 Change-Id: I4c4b2fc796f23d83be67f7edaacd7496c145d985
Diffstat (limited to 'media')
-rw-r--r--media/java/android/media/IAudioService.aidl2
1 files changed, 1 insertions, 1 deletions
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index 8e96218..c75c7e5 100644
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -40,7 +40,7 @@ import android.view.KeyEvent;
*/
interface IAudioService {
- void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags,
+ oneway void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags,
String callingPackage, String caller);
void adjustStreamVolume(int streamType, int direction, int flags, String callingPackage);