Merge "Add DeviceffectHandle mutex" into main
diff --git a/audio_utils/include/audio_utils/mutex.h b/audio_utils/include/audio_utils/mutex.h
index d159c3b..f656cfe 100644
--- a/audio_utils/include/audio_utils/mutex.h
+++ b/audio_utils/include/audio_utils/mutex.h
@@ -60,24 +60,25 @@
kAudioFlinger_Mutex = 8,
kDeviceEffectManager_Mutex = 9,
kDeviceEffectProxy_ProxyMutex = 10,
- kPatchCommandThread_Mutex = 11,
- kThreadBase_Mutex = 12,
- kAudioFlinger_ClientMutex = 13,
- kEffectChain_Mutex = 14,
- kEffectBase_Mutex = 15,
- kAudioFlinger_HardwareMutex = 16,
- kMelReporter_Mutex = 17,
- kAudioFlinger_UnregisteredWritersMutex = 18,
- kAsyncCallbackThread_Mutex = 19,
- kConfigEvent_Mutex = 20,
- kOutputTrack_TrackMetadataMutex = 21,
- kPassthruPatchRecord_ReadMutex = 22,
- kPatchCommandThread_ListenerMutex = 23,
- kPlaybackThread_AudioTrackCbMutex = 24,
- kAudioPolicyService_NotificationClientsMutex = 25,
- kMediaLogNotifier_Mutex = 26,
- kOtherMutex = 27,
- kSize = 28,
+ kDeviceEffectHandle_Mutex = 11,
+ kPatchCommandThread_Mutex = 12,
+ kThreadBase_Mutex = 13,
+ kAudioFlinger_ClientMutex = 14,
+ kEffectChain_Mutex = 15,
+ kEffectBase_Mutex = 16,
+ kAudioFlinger_HardwareMutex = 17,
+ kMelReporter_Mutex = 18,
+ kAudioFlinger_UnregisteredWritersMutex = 19,
+ kAsyncCallbackThread_Mutex = 20,
+ kConfigEvent_Mutex = 21,
+ kOutputTrack_TrackMetadataMutex = 22,
+ kPassthruPatchRecord_ReadMutex = 23,
+ kPatchCommandThread_ListenerMutex = 24,
+ kPlaybackThread_AudioTrackCbMutex = 25,
+ kAudioPolicyService_NotificationClientsMutex = 26,
+ kMediaLogNotifier_Mutex = 27,
+ kOtherMutex = 28,
+ kSize = 29,
};
// Lock by name
@@ -93,6 +94,7 @@
"AudioFlinger_Mutex",
"DeviceEffectManager_Mutex",
"DeviceEffectProxy_ProxyMutex",
+ "DeviceEffectHandle_Mutex",
"PatchCommandThread_Mutex",
"ThreadBase_Mutex",
"AudioFlinger_ClientMutex",
@@ -140,8 +142,10 @@
ACQUIRED_AFTER(android::audio_utils::AudioFlinger_Mutex);
inline mutex* DeviceEffectProxy_ProxyMutex
ACQUIRED_AFTER(android::audio_utils::DeviceEffectManager_Mutex);
-inline mutex* PatchCommandThread_Mutex
+inline mutex* DeviceEffectHandle_Mutex
ACQUIRED_AFTER(android::audio_utils::DeviceEffectProxy_ProxyMutex);
+inline mutex* PatchCommandThread_Mutex
+ ACQUIRED_AFTER(android::audio_utils::DeviceEffectHandle_Mutex);
inline mutex* ThreadBase_Mutex
ACQUIRED_AFTER(android::audio_utils::PatchCommandThread_Mutex);
inline mutex* AudioFlinger_ClientMutex
@@ -277,8 +281,14 @@
EXCLUDES(android::audio_utils::PatchCommandThread_Mutex) \
EXCLUDES_BELOW_PatchCommandThread_Mutex
-#define EXCLUDES_BELOW_DeviceEffectProxy_ProxyMutex \
+#define EXCLUDES_BELOW_DeviceEffectHandle_Mutex \
EXCLUDES_PatchCommandThread_Mutex
+#define EXCLUDES_DeviceEffectHandle_Mutex \
+ EXCLUDES(android::audio_utils::DeviceEffectHandle_Mutex) \
+ EXCLUDES_BELOW_DeviceEffectHandle_Mutex
+
+#define EXCLUDES_BELOW_DeviceEffectProxy_ProxyMutex \
+ EXCLUDES_DeviceEffectHandle_Mutex
#define EXCLUDES_DeviceEffectProxy_ProxyMutex \
EXCLUDES(android::audio_utils::DeviceEffectProxy_ProxyMutex) \
EXCLUDES_BELOW_DeviceEffectProxy_ProxyMutex
diff --git a/audio_utils/tests/generate_mutex_order.cpp b/audio_utils/tests/generate_mutex_order.cpp
index 734597d..8dde2b8 100644
--- a/audio_utils/tests/generate_mutex_order.cpp
+++ b/audio_utils/tests/generate_mutex_order.cpp
@@ -34,6 +34,7 @@
// 5) EffectHandle -> ThreadBase -> EffectChain -> EffectBase(EffectModule)
// 6) AudioFlinger::mutex() -> DeviceEffectManager -> DeviceEffectProxy -> EffectChain
// -> AudioFlinger::hardwareMutex() when adding/removing effect to/from HAL
+ // 7) AudioFlinger -> DeviceEffectManager -> DeviceEffectProxy -> DeviceEffectHandle
"Spatializer_Mutex", // AP - must come before EffectHandle_Mutex
"AudioPolicyEffects_Mutex", // AP - never hold AudioPolicyEffects_Mutex while calling APS,
@@ -50,6 +51,7 @@
"AudioFlinger_Mutex", // AF
"DeviceEffectManager_Mutex", // AF
"DeviceEffectProxy_ProxyMutex", // AF: used for device effects (which have no chain).
+ "DeviceEffectHandle_Mutex", // AF: used for device effects when controlled internally.
"PatchCommandThread_Mutex", // AF
"ThreadBase_Mutex", // AF
"AudioFlinger_ClientMutex", // AF