diff options
author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2015-11-17 23:39:57 +0200 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2015-11-18 22:21:12 +0200 |
commit | c78a869e7c00fa95fc6a9f62bbd822fa579806b2 (patch) | |
tree | c208cff9000cf5cb59ed528988ff19e2bc73d3b9 | |
parent | ac362f919a2376bac1f7fd4c96f04edf24f30cff (diff) |
Fb: collect fbs and destroy them in card's destructor
-rw-r--r-- | libkms++/card.cpp | 3 | ||||
-rw-r--r-- | libkms++/card.h | 2 | ||||
-rw-r--r-- | libkms++/framebuffer.cpp | 12 | ||||
-rw-r--r-- | libkms++/framebuffer.h | 2 |
4 files changed, 18 insertions, 1 deletions
diff --git a/libkms++/card.cpp b/libkms++/card.cpp index a0e395e..48ab560 100644 --- a/libkms++/card.cpp +++ b/libkms++/card.cpp @@ -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; diff --git a/libkms++/card.h b/libkms++/card.h index bbe34e2..1bc6af7 100644 --- a/libkms++/card.h +++ b/libkms++/card.h @@ -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; diff --git a/libkms++/framebuffer.cpp b/libkms++/framebuffer.cpp index a7e5ad6..2481561 100644 --- a/libkms++/framebuffer.cpp +++ b/libkms++/framebuffer.cpp @@ -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); +} + + } diff --git a/libkms++/framebuffer.h b/libkms++/framebuffer.h index 12374ae..77a6c32 100644 --- a/libkms++/framebuffer.h +++ b/libkms++/framebuffer.h @@ -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; } |