Fix crash when a layer is destroyed immediately after creation
If a layer handle is destroyed before we commit any transactions, we
will not be able to promote the legacy layer object in the main thread. This
is a few of the remaining warts with the legacy frontend which we can fixed
once we remove the flag. For now, fix this by checking if the layer was
destroyed before accessing the legacy layer object.
Test: presubmit
Fixes: 318347070
Change-Id: Ia54feb4b483f0981acd198a0af07745cec183863
diff --git a/services/surfaceflinger/tests/LayerTransaction_test.cpp b/services/surfaceflinger/tests/LayerTransaction_test.cpp
index 03de8d0..ea141f3 100644
--- a/services/surfaceflinger/tests/LayerTransaction_test.cpp
+++ b/services/surfaceflinger/tests/LayerTransaction_test.cpp
@@ -213,6 +213,15 @@
ASSERT_EQ(callCount, 1);
}
+TEST_F(LayerTransactionTest, AddRemoveLayers) {
+ for (int i = 0; i < 100; i++) {
+ sp<SurfaceControl> layer;
+ ASSERT_NO_FATAL_FAILURE(
+ layer = createLayer("test", 32, 32, ISurfaceComposerClient::eFXSurfaceBufferState));
+ layer.clear();
+ }
+}
+
} // namespace android
// TODO(b/129481165): remove the #pragma below and fix conversion issues