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

Commit 18424bb7 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi Committed by android-build-team Robot
Browse files

AudioService: fix deallock setBluetoothScoOn vs setMode

In AudioService:
setBluetoothScoOn()
  > setBluetoothScoOnInt()
     > synchronized(mSettingsLock)
     > muteRingerModeStreams()
	> synchronized (VolumeStreamState.class)
vs
setMode()
  > setModeInt()
     > synchronized (mSettingsLock)
        > synchronized (VolumeStreamState.class)

The issue comes from setBluetoothScoOnInt() releasing the lock
  on mSettingsLock before calling muteRingerModeStreams(). This
  breaks the expected lock ordering in AudioService, where
  mSettingsLock must be locked before VolumeStreamState.class.

Bug: 109746821
Test: see bug
Change-Id: I853ca60781efc506626b6345f27da701655ac359
(cherry picked from commit c106d9f9)
parent b96cfb97
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -2623,6 +2623,7 @@ public class AudioService extends IAudioService.Stub
        broadcastRingerMode(AudioManager.RINGER_MODE_CHANGED_ACTION, ringerMode);
    }

    @GuardedBy("mSettingsLock")
    private void muteRingerModeStreams() {
        // Mute stream if not previously muted by ringer mode and (ringer mode
        // is not RINGER_MODE_NORMAL OR stream is zen muted) and stream is affected by ringer mode.
@@ -2710,9 +2711,8 @@ public class AudioService extends IAudioService.Stub
        synchronized(mSettingsLock) {
            change = mRingerMode != ringerMode;
            mRingerMode = ringerMode;
        }

            muteRingerModeStreams();
        }

        // Post a persist ringer mode msg
        if (persist) {