FenceTimeline: Fix a potential race condition
FenceTimeline::updateSignalTimes checks if mQueue is empty without
grabbing the lock. This can lead a situaltion that a threads calls
pop() on an empty queue.
Test: boot
Bug: 132735340
Change-Id: I3007bfc1161797cb4d853506bb354e820bc9105d
diff --git a/libs/ui/FenceTime.cpp b/libs/ui/FenceTime.cpp
index 340231d..bdfe04b 100644
--- a/libs/ui/FenceTime.cpp
+++ b/libs/ui/FenceTime.cpp
@@ -279,8 +279,8 @@
}
void FenceTimeline::updateSignalTimes() {
+ std::lock_guard<std::mutex> lock(mMutex);
while (!mQueue.empty()) {
- std::lock_guard<std::mutex> lock(mMutex);
std::shared_ptr<FenceTime> fence = mQueue.front().lock();
if (!fence) {
// The shared_ptr no longer exists and no one cares about the