diff options
| author | Tom Englund <tomenglund26@gmail.com> | 2024-06-06 20:27:09 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-06 20:27:09 +0200 |
| commit | af5f24929d83cc7a97a77de516bc665e38acfa12 (patch) | |
| tree | f2afec3d02f3595efdadb4e40fa4724244953c40 /src | |
| parent | c95845b1488b4bd63e901cbdc4cb68c27a45971b (diff) | |
core: free more memory on destruction (#6348)
* 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.
* cursormgr: free the animation timer event source
properly free the animation timer event source on destruction.
* compositor: free the critsig event source on exit
properly free the critical signal event source on exit.
* popup: clang format style
clang format.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Compositor.cpp | 5 | ||||
| -rw-r--r-- | src/Compositor.hpp | 17 | ||||
| -rw-r--r-- | src/desktop/Popup.cpp | 2 | ||||
| -rw-r--r-- | src/managers/CursorManager.cpp | 3 | ||||
| -rw-r--r-- | src/managers/PointerManager.hpp | 5 |
5 files changed, 22 insertions, 10 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 254abd92..73708b1b 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 94d9e4d0..a297518d 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<CCompositor> g_pCompositor; diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp index d42a0ef0..6bc76fc7 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; diff --git a/src/managers/CursorManager.cpp b/src/managers/CursorManager.cpp index cb43f0b9..e3ebce80 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) { diff --git a/src/managers/PointerManager.hpp b/src/managers/PointerManager.hpp index b6cb0c7a..db9f27e7 100644 --- a/src/managers/PointerManager.hpp +++ b/src/managers/PointerManager.hpp @@ -146,6 +146,11 @@ class CPointerManager { struct SMonitorPointerState { SMonitorPointerState(SP<CMonitor> m) : monitor(m) {} + ~SMonitorPointerState() { + if (cursorFrontBuffer) + wlr_buffer_unlock(cursorFrontBuffer); + } + WP<CMonitor> monitor; int softwareLocks = 0; |
