OSDN Git Service

AudioService: fix deallock setBluetoothScoOn vs setMode
authorJean-Michel Trivi <jmtrivi@google.com>
Thu, 7 Jun 2018 19:28:27 +0000 (12:28 -0700)
committerandroid-build-team Robot <android-build-team-robot@google.com>
Tue, 12 Jun 2018 01:48:42 +0000 (01:48 +0000)
commit18424bb7a480883ac54d30303cbbe257e7edf712
tree6ad40fdae670eb1bb05f257d4da48b37bd0bfc36
parentb96cfb97ac9b5928673e8f348cb406f46c237d71
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 c106d9f958be76ab14a6724525f39bc3fec03fd2)
services/core/java/com/android/server/audio/AudioService.java