From 63bcd4078fc98b029feec83da59bb8ea52144f66 Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Thu, 6 Jun 2024 17:38:25 +0200 Subject: [PATCH 1/4] pointermgr: add destructor to state and free buf if the pointer has a buffer set it wont be freed upon destruction, make asan more happy by adding a destructor and wlr_buf_unlock it on exit. --- src/managers/PointerManager.hpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/managers/PointerManager.hpp b/src/managers/PointerManager.hpp index b6cb0c7a5e7..db9f27e79ba 100644 --- a/src/managers/PointerManager.hpp +++ b/src/managers/PointerManager.hpp @@ -146,6 +146,11 @@ class CPointerManager { struct SMonitorPointerState { SMonitorPointerState(SP m) : monitor(m) {} + ~SMonitorPointerState() { + if (cursorFrontBuffer) + wlr_buffer_unlock(cursorFrontBuffer); + } + WP monitor; int softwareLocks = 0; From 0242a7a2afbef8ea866785db9fb258b59c9cea27 Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Thu, 6 Jun 2024 17:43:56 +0200 Subject: [PATCH 2/4] cursormgr: free the animation timer event source properly free the animation timer event source on destruction. --- src/managers/CursorManager.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/managers/CursorManager.cpp b/src/managers/CursorManager.cpp index cb43f0b9878..e3ebce808d5 100644 --- a/src/managers/CursorManager.cpp +++ b/src/managers/CursorManager.cpp @@ -58,6 +58,9 @@ CCursorManager::CCursorManager() { CCursorManager::~CCursorManager() { if (m_pWLRXCursorMgr) wlr_xcursor_manager_destroy(m_pWLRXCursorMgr); + + if (m_pAnimationTimer) + wl_event_source_remove(m_pAnimationTimer); } void CCursorManager::dropBufferRef(CCursorManager::CCursorBuffer* ref) { From 9ee72c2acebfb3b76be704af7cc4481d67f2fd92 Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Thu, 6 Jun 2024 17:51:30 +0200 Subject: [PATCH 3/4] compositor: free the critsig event source on exit properly free the critical signal event source on exit. --- src/Compositor.cpp | 5 ++++- src/Compositor.hpp | 17 +++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 254abd92aaf..73708b1b942 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -147,7 +147,7 @@ void CCompositor::initServer() { m_sWLEventLoop = wl_display_get_event_loop(m_sWLDisplay); // register crit signal handler - wl_event_loop_add_signal(m_sWLEventLoop, SIGTERM, handleCritSignal, nullptr); + m_critSigSource = wl_event_loop_add_signal(m_sWLEventLoop, SIGTERM, handleCritSignal, nullptr); if (!envEnabled("HYPRLAND_NO_CRASHREPORTER")) { signal(SIGSEGV, handleUnrecoverableSignal); @@ -373,6 +373,9 @@ void CCompositor::cleanup() { if (m_sWLRBackend) wlr_backend_destroy(m_sWLRBackend); + if (m_critSigSource) + wl_event_source_remove(m_critSigSource); + wl_display_terminate(m_sWLDisplay); m_sWLDisplay = nullptr; diff --git a/src/Compositor.hpp b/src/Compositor.hpp index 94d9e4d0719..a297518d48d 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -178,14 +178,15 @@ class CCompositor { std::string explicitConfigPath; private: - void initAllSignals(); - void removeAllSignals(); - void cleanEnvironment(); - void setRandomSplash(); - void initManagers(eManagersInitStage stage); - void prepareFallbackOutput(); - - uint64_t m_iHyprlandPID = 0; + void initAllSignals(); + void removeAllSignals(); + void cleanEnvironment(); + void setRandomSplash(); + void initManagers(eManagersInitStage stage); + void prepareFallbackOutput(); + + uint64_t m_iHyprlandPID = 0; + wl_event_source* m_critSigSource = nullptr; }; inline std::unique_ptr g_pCompositor; From 7fb94e3086313477d68ba18ced520859ee3ec892 Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Thu, 6 Jun 2024 20:03:05 +0200 Subject: [PATCH 4/4] popup: clang format style clang format. --- src/desktop/Popup.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp index d42a0ef0bb6..6bc76fc7764 100644 --- a/src/desktop/Popup.cpp +++ b/src/desktop/Popup.cpp @@ -136,7 +136,7 @@ void CPopup::onCommit(bool ignoreSiblings) { onDestroy(); return; } - + if (m_pResource->surface->initialCommit) { m_pResource->surface->scheduleConfigure(); return;