Fb: collect fbs and destroy them in card's destructor
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 17 Nov 2015 21:39:57 +0000 (23:39 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 18 Nov 2015 20:21:12 +0000 (22:21 +0200)
libkms++/card.cpp
libkms++/card.h
libkms++/framebuffer.cpp
libkms++/framebuffer.h

index a0e395eb19acf40eb5ff8f76073d37444cfdd8b2..48ab560747993b187e64042ac91c88bf46733316 100644 (file)
@@ -120,6 +120,9 @@ Card::~Card()
 {
        restore_modes();
 
+       while (m_framebuffers.size() > 0)
+               delete m_framebuffers.back();
+
        for (auto pair : m_obmap)
                delete pair.second;
 
index bbe34e28a15c65e9d09e5c6f812e92143c0333aa..1bc6af74436ef54545b9272564f1798bd9c6d585 100644 (file)
@@ -11,6 +11,7 @@ namespace kms
 {
 class Card
 {
+       friend class Framebuffer;
 public:
        Card();
        ~Card();
@@ -57,6 +58,7 @@ private:
        std::vector<Crtc*> m_crtcs;
        std::vector<Plane*> m_planes;
        std::vector<Property*> m_properties;
+       std::vector<Framebuffer*> m_framebuffers;
 
        int m_fd;
        bool m_master;
index a7e5ad6921f7ad45dadbda4f53e9af0cb5949154..2481561622b4d27b22af3557a0f653f802316665 100644 (file)
@@ -1,3 +1,4 @@
+#include <algorithm>
 #include <cstring>
 #include <stdexcept>
 #include <sys/mman.h>
@@ -14,6 +15,7 @@ namespace kms
 Framebuffer::Framebuffer(Card& card, int width, int height)
        : DrmObject(card, DRM_MODE_OBJECT_FB), m_width(width), m_height(height)
 {
+       card.m_framebuffers.push_back(this);
 }
 
 Framebuffer::Framebuffer(Card& card, uint32_t id)
@@ -25,6 +27,16 @@ Framebuffer::Framebuffer(Card& card, uint32_t id)
        m_height = fb->height;
 
        drmModeFreeFB(fb);
+
+       card.m_framebuffers.push_back(this);
 }
 
+Framebuffer::~Framebuffer()
+{
+       auto& fbs = card().m_framebuffers;
+       auto iter = find(fbs.begin(), fbs.end(), this);
+       card().m_framebuffers.erase(iter);
+}
+
+
 }
index 12374ae87118054f5ec42134afa31bff8756cab9..77a6c3291e81075b29731941df658634024980e2 100644 (file)
@@ -8,7 +8,7 @@ class Framebuffer : public DrmObject
 {
 public:
        Framebuffer(Card& card, uint32_t id);
-       virtual ~Framebuffer() { }
+       virtual ~Framebuffer();
 
        uint32_t width() const { return m_width; }
        uint32_t height() const { return m_height; }