From 03be681d485ec5e86052e764a1120a5953e86cdf Mon Sep 17 00:00:00 2001 From: Fabien Sanglard Date: Tue, 31 Jan 2017 12:14:57 -0800 Subject: [PATCH] Set cache dirty on layer creation/destruction The adapter misses an edge cases where a transaction both destroys and creates a layer. Under these conditions, assignHwc1LayerIds() is not called. mHwc1LayerMap contains reference to destroyed layers and ultimately lead to segfault. Test: Angler eng device and AUPT. Change-Id: I96bcbabf74a80cc87df796c0bc84b84e2bda8614 --- services/surfaceflinger/DisplayHardware/HWC2On1Adapter.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/surfaceflinger/DisplayHardware/HWC2On1Adapter.cpp b/services/surfaceflinger/DisplayHardware/HWC2On1Adapter.cpp index 7322c134ce..92bcb77fc7 100644 --- a/services/surfaceflinger/DisplayHardware/HWC2On1Adapter.cpp +++ b/services/surfaceflinger/DisplayHardware/HWC2On1Adapter.cpp @@ -607,6 +607,7 @@ Error HWC2On1Adapter::Display::createLayer(hwc2_layer_t* outLayerId) mDevice.mLayers.emplace(std::make_pair(layer->getId(), layer)); *outLayerId = layer->getId(); ALOGV("[%" PRIu64 "] created layer %" PRIu64, mId, *outLayerId); + mZIsDirty = true; return Error::None; } @@ -630,6 +631,7 @@ Error HWC2On1Adapter::Display::destroyLayer(hwc2_layer_t layerId) } } ALOGV("[%" PRIu64 "] destroyed layer %" PRIu64, mId, layerId); + mZIsDirty = true; return Error::None; } -- 2.11.0