internal: fix a few asan reported leaks on exit of hyprland (#5852)

* notifications: free cairo images on destruction

asan reports a leak on exit if we dont free the image we created in the
draw function. add a destructor and free images on exit.

* compositor: destroy wlroots types on exit

there are a few types not being destroyed on exit and causing a leak on
exit in wlroots reported by asan, add those.

* cursormgr: ensure we destroy cursor mgr on exit

add a destructor and call wlr_xcursor_manager_destroy on the manager on
destruction, leak reported by asan.

* keybindmgr: free state and keymap

add missing keymap_unref on creation, and add a destructor and free the
state on exit. leak reported by asan.

* skeyboard: add destructor and free state

free the state on destruction of keyboard, reported as leak by asan
This commit is contained in:
Tom Englund 2024-05-03 15:42:08 +02:00 committed by GitHub
parent 387127b12a
commit d5bf15387a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 41 additions and 1 deletions

View file

@ -53,6 +53,11 @@ CCursorManager::CCursorManager() {
static auto P = g_pHookSystem->hookDynamic("monitorLayoutChanged", [this](void* self, SCallbackInfo& info, std::any param) { this->updateTheme(); });
}
CCursorManager::~CCursorManager() {
if (m_pWLRXCursorMgr)
wlr_xcursor_manager_destroy(m_pWLRXCursorMgr);
}
void CCursorManager::dropBufferRef(CCursorManager::CCursorBuffer* ref) {
std::erase_if(m_vCursorBuffers, [ref](const auto& buf) { return buf.get() == ref; });
}

View file

@ -13,6 +13,7 @@ struct wlr_xwayland;
class CCursorManager {
public:
CCursorManager();
~CCursorManager();
wlr_buffer* getCursorBuffer();

View file

@ -116,6 +116,11 @@ CKeybindManager::CKeybindManager() {
});
}
CKeybindManager::~CKeybindManager() {
if (m_pXKBTranslationState)
xkb_state_unref(m_pXKBTranslationState);
}
void CKeybindManager::addKeybind(SKeybind kb) {
m_lKeybinds.push_back(kb);
@ -219,6 +224,7 @@ void CKeybindManager::updateXKBTranslationState() {
xkb_context_unref(PCONTEXT);
m_pXKBTranslationState = xkb_state_new(PKEYMAP);
xkb_keymap_unref(PKEYMAP);
}
bool CKeybindManager::ensureMouseBindState() {

View file

@ -58,6 +58,7 @@ struct SParsedKey {
class CKeybindManager {
public:
CKeybindManager();
~CKeybindManager();
bool onKeyEvent(wlr_keyboard_key_event*, SKeyboard*);
bool onAxisEvent(wlr_pointer_axis_event*);