drm_hwcomposer: fix buffer leak when using the GL compositor inside DrmDisplayCompositor
Change-Id: Id3a6deea9fc0f97640b34dacb25d36f3793f2d4e
diff --git a/drmdisplaycomposition.cpp b/drmdisplaycomposition.cpp
index 21a9c2a..c76a23c 100644
--- a/drmdisplaycomposition.cpp
+++ b/drmdisplaycomposition.cpp
@@ -171,4 +171,8 @@
uint32_t DrmDisplayComposition::dpms_mode() const {
return dpms_mode_;
}
+
+Importer *DrmDisplayComposition::importer() const {
+ return importer_;
+}
}
diff --git a/drmdisplaycomposition.h b/drmdisplaycomposition.h
index 9c51078..7202c7c 100644
--- a/drmdisplaycomposition.h
+++ b/drmdisplaycomposition.h
@@ -67,6 +67,8 @@
DrmCompositionLayerVector_t *GetCompositionLayers();
uint32_t dpms_mode() const;
+ Importer *importer() const;
+
private:
DrmDisplayComposition(const DrmDisplayComposition &) = delete;
diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp
index 7f43503..b76d81d 100644
--- a/drmdisplaycompositor.cpp
+++ b/drmdisplaycompositor.cpp
@@ -206,6 +206,10 @@
return ret;
}
+ for (auto &comp_layer : *layers)
+ if (comp_layer.plane == NULL)
+ display_comp->importer()->ReleaseBuffer(&comp_layer.bo);
+
layers->erase(std::remove_if(layers->begin(), layers->end(),
drm_composition_layer_has_no_plane),
layers->end());