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

Commit 6b02c898 authored by Eric Laurent's avatar Eric Laurent Committed by Android Git Automerger
Browse files

am 5231cb4b: am b928b7c2: am ba64d298: Merge "AudioService: fix cross deadlock...

am 5231cb4b: am b928b7c2: am ba64d298: Merge "AudioService: fix cross deadlock in VolumeStreamState"

* commit '5231cb4b':
  AudioService: fix cross deadlock in VolumeStreamState
parents b6094190 5231cb4b
Loading
Loading
Loading
Loading
+147 −133
Original line number Diff line number Diff line
@@ -2909,7 +2909,8 @@ public class AudioService extends IAudioService.Stub {
            return name + "_" + suffix;
        }

        public synchronized void readSettings() {
        public void readSettings() {
            synchronized (VolumeStreamState.class) {
                // force maximum volume on all streams if fixed volume property is set
                if (mUseFixedVolume) {
                    mIndex.put(AudioSystem.DEVICE_OUT_DEFAULT, mIndexMax);
@@ -2960,6 +2961,7 @@ public class AudioService extends IAudioService.Stub {
                    }
                }
            }
        }

        public void applyDeviceVolume(int device) {
            int index;
@@ -2974,7 +2976,8 @@ public class AudioService extends IAudioService.Stub {
            AudioSystem.setStreamVolumeIndex(mStreamType, index, device);
        }

        public synchronized void applyAllVolumes() {
        public void applyAllVolumes() {
            synchronized (VolumeStreamState.class) {
                // apply default volume first: by convention this will reset all
                // devices volumes in audio policy manager to the supplied value
                int index;
@@ -3003,13 +3006,15 @@ public class AudioService extends IAudioService.Stub {
                    }
                }
            }
        }

        public boolean adjustIndex(int deltaIndex, int device) {
            return setIndex(getIndex(device) + deltaIndex,
                            device);
        }

        public synchronized boolean setIndex(int index, int device) {
        public boolean setIndex(int index, int device) {
            synchronized (VolumeStreamState.class) {
                int oldIndex = getIndex(device);
                index = getValidIndex(index);
                synchronized (mCameraSoundForced) {
@@ -3042,8 +3047,10 @@ public class AudioService extends IAudioService.Stub {
                    return false;
                }
            }
        }

        public synchronized int getIndex(int device) {
        public int getIndex(int device) {
            synchronized (VolumeStreamState.class) {
                Integer index = mIndex.get(device);
                if (index == null) {
                    // there is always an entry for AudioSystem.DEVICE_OUT_DEFAULT
@@ -3051,12 +3058,14 @@ public class AudioService extends IAudioService.Stub {
                }
                return index.intValue();
            }
        }

        public int getMaxIndex() {
            return mIndexMax;
        }

        public synchronized void setAllIndexes(VolumeStreamState srcStream) {
        public void setAllIndexes(VolumeStreamState srcStream) {
            synchronized (VolumeStreamState.class) {
                int srcStreamType = srcStream.getStreamType();
                // apply default device volume from source stream to all devices first in case
                // some devices are present in this stream state but not in source stream state
@@ -3080,8 +3089,10 @@ public class AudioService extends IAudioService.Stub {
                    setIndex(index, device);
                }
            }
        }

        public synchronized void setAllIndexesToMax() {
        public void setAllIndexesToMax() {
            synchronized (VolumeStreamState.class) {
                Set set = mIndex.entrySet();
                Iterator i = set.iterator();
                while (i.hasNext()) {
@@ -3089,8 +3100,10 @@ public class AudioService extends IAudioService.Stub {
                    entry.setValue(mIndexMax);
                }
            }
        }

        public synchronized void mute(IBinder cb, boolean state) {
        public void mute(IBinder cb, boolean state) {
            synchronized (VolumeStreamState.class) {
                VolumeDeathHandler handler = getDeathHandler(cb, state);
                if (handler == null) {
                    Log.e(TAG, "Could not get client death handler for stream: "+mStreamType);
@@ -3098,6 +3111,7 @@ public class AudioService extends IAudioService.Stub {
                }
                handler.mute(state);
            }
        }

        public int getStreamType() {
            return mStreamType;