Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Skip to content
Commit a38e1f4e authored by Dongwon Kang's avatar Dongwon Kang
Browse files

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
parent 2d4dc8db
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment