FTL: Silence warnings for FTL_FAKE_GUARD
Do not return an lvalue reference to avoid warnings like:
warning: returning variable 'mPhysicalDisplays' by reference
requires holding mutex 'mStateLock' exclusively
[-Wthread-safety-reference-return]
The removal of the lambda means that FTL_FAKE_GUARD(m, e) can no longer
be used in a function that REQUIRES(m), which was redundant. Remove one
such instance in SF.
Bug: 354740314
Bug: 185536303
Flag: EXEMPT compile-time change
Test: m surfaceflinger
Merged-In: I35b029885e9c541c1715c280d4f3542de5096145
Change-Id: I35b029885e9c541c1715c280d4f3542de5096145
diff --git a/include/ftl/fake_guard.h b/include/ftl/fake_guard.h
index e601251..0bf2870 100644
--- a/include/ftl/fake_guard.h
+++ b/include/ftl/fake_guard.h
@@ -76,12 +76,8 @@
FTL_ATTRIBUTE(release_capability(mutex))
#endif
-// The parentheses around `expr` are needed to deduce an lvalue or rvalue reference.
-#define FTL_FAKE_GUARD2(mutex, expr) \
- [&]() -> decltype(auto) { \
- const android::ftl::FakeGuard guard(mutex); \
- return (expr); \
- }()
+#define FTL_FAKE_GUARD2(mutex, expr) \
+ (android::ftl::FakeGuard(mutex), expr)
#define FTL_MAKE_FAKE_GUARD(arg1, arg2, guard, ...) guard
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 0f8e3bf..19995f2 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -6675,7 +6675,7 @@
}
void SurfaceFlinger::dumpHwcLayersMinidumpLockedLegacy(std::string& result) const {
- for (const auto& [token, display] : FTL_FAKE_GUARD(mStateLock, mDisplays)) {
+ for (const auto& [token, display] : mDisplays) {
const auto displayId = HalDisplayId::tryCast(display->getId());
if (!displayId) {
continue;
@@ -6695,7 +6695,7 @@
if (!mLayerLifecycleManagerEnabled) {
return dumpHwcLayersMinidumpLockedLegacy(result);
}
- for (const auto& [token, display] : FTL_FAKE_GUARD(mStateLock, mDisplays)) {
+ for (const auto& [token, display] : mDisplays) {
const auto displayId = HalDisplayId::tryCast(display->getId());
if (!displayId) {
continue;