SF: Fix an EventThread deadlock
EventThread::removeDisplayEventConnection tried to acquire the mutex,
however the caller (eventThread::threadMain()) already had it.
The fix was to not acquire the mutex, since threadMain() was the only
caller.
Bug: 73256320
Test: Can toggle "Show taps" from dev options without lockup.
Change-Id: I855b19b3d0ac9e0ea05604cc7b077f4a5030a00b
diff --git a/services/surfaceflinger/EventThread.cpp b/services/surfaceflinger/EventThread.cpp
index 90aab50..1f4f5a5 100644
--- a/services/surfaceflinger/EventThread.cpp
+++ b/services/surfaceflinger/EventThread.cpp
@@ -100,8 +100,7 @@
return NO_ERROR;
}
-void EventThread::removeDisplayEventConnection(const wp<EventThread::Connection>& connection) {
- std::lock_guard<std::mutex> lock(mMutex);
+void EventThread::removeDisplayEventConnectionLocked(const wp<EventThread::Connection>& connection) {
mDisplayEventConnections.remove(connection);
}
@@ -195,7 +194,7 @@
// handle any other error on the pipe as fatal. the only
// reasonable thing to do is to clean-up this connection.
// The most common error we'll get here is -EPIPE.
- removeDisplayEventConnection(signalConnections[i]);
+ removeDisplayEventConnectionLocked(signalConnections[i]);
}
}
}