[sf] Fix crash caused by invalid access of mPreviouslyPresentedLayerStacks
While trying to update the release fence for layers with buffer
removed, we incorrectly accessed and updated the same data struct.
Test: presbumit
Fixes: 279397500
Change-Id: I2488da1696774669777e94e23301af6ecc2ae581
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index c88bff5..4e0ac10 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -2874,7 +2874,10 @@
}
for (auto layer : mLayersWithBuffersRemoved) {
- for (auto layerStack : layer->mPreviouslyPresentedLayerStacks) {
+ std::vector<ui::LayerStack> previouslyPresentedLayerStacks =
+ std::move(layer->mPreviouslyPresentedLayerStacks);
+ layer->mPreviouslyPresentedLayerStacks.clear();
+ for (auto layerStack : previouslyPresentedLayerStacks) {
auto optDisplay = layerStackToDisplay.get(layerStack);
if (optDisplay && !optDisplay->get()->isVirtual()) {
auto fence = getHwComposer().getPresentFence(optDisplay->get()->getPhysicalId());