graphics: fix leaks in IComposer default impl
When a layer is removed, remove its cached buffer/sidestream as well.
Test: fixed OOM
Change-Id: Ibafe18ff686ae6bcb1fc4baed30b7784d2b40529
diff --git a/graphics/composer/2.1/default/Hwc.cpp b/graphics/composer/2.1/default/Hwc.cpp
index 09c62f0..d45a955 100644
--- a/graphics/composer/2.1/default/Hwc.cpp
+++ b/graphics/composer/2.1/default/Hwc.cpp
@@ -698,6 +698,14 @@
Return<Error> HwcHal::destroyLayer(Display display, Layer layer)
{
auto error = mDispatch.destroyLayer(mDevice, display, layer);
+ if (error == HWC2_ERROR_NONE) {
+ std::lock_guard<std::mutex> lock(mDisplayMutex);
+
+ auto dpy = mDisplays.find(display);
+ dpy->second.LayerBuffers.erase(layer);
+ dpy->second.LayerSidebandStreams.erase(layer);
+ }
+
return static_cast<Error>(error);
}