[automerger skipped] Merge "Replace soong config module types with selects" into main am: 40f0830e3a -s ours am: 92c35b926a -s ours

am skip reason: Merged-In I6f9e27224c239702764101025fe6ed1f2c93b46a with SHA-1 0b99b52358 is already in history

Original change: https://android-review.googlesource.com/c/platform/external/wpa_supplicant_8/+/3233606

Change-Id: Id1d5ba2f035179dd13c6caf951c1f330aebb1e17
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/wpa_supplicant/aidl/aidl_return_util.h b/wpa_supplicant/aidl/aidl_return_util.h
index 109723a..2cb8b5a 100644
--- a/wpa_supplicant/aidl/aidl_return_util.h
+++ b/wpa_supplicant/aidl/aidl_return_util.h
@@ -10,6 +10,12 @@
 #define AIDL_RETURN_UTIL_H_
 
 #include <aidl/android/hardware/wifi/supplicant/SupplicantStatusCode.h>
+#include <mutex>
+
+namespace {
+	// Mutex serializes requests when this process is called by multiple clients
+	std::mutex aidl_return_mutex;
+}
 
 namespace aidl {
 namespace android {
@@ -33,6 +39,7 @@
 	ObjT* obj, SupplicantStatusCode status_code_if_invalid, WorkFuncT&& work,
 	Args&&... args)
 {
+	std::lock_guard<std::mutex> guard(aidl_return_mutex);
 	if (obj->isValid()) {
 		return (obj->*work)(std::forward<Args>(args)...);
 	} else {
@@ -47,6 +54,7 @@
 	ObjT* obj, SupplicantStatusCode status_code_if_invalid, WorkFuncT&& work,
 	ReturnT* ret_val, Args&&... args)
 {
+	std::lock_guard<std::mutex> guard(aidl_return_mutex);
 	if (obj->isValid()) {
 		auto call_pair = (obj->*work)(std::forward<Args>(args)...);
 		*ret_val = call_pair.first;