summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Englund <tomenglund26@gmail.com>2024-06-06 20:27:09 +0200
committerGitHub <noreply@github.com>2024-06-06 20:27:09 +0200
commitaf5f24929d83cc7a97a77de516bc665e38acfa12 (patch)
treef2afec3d02f3595efdadb4e40fa4724244953c40 /src
parentc95845b1488b4bd63e901cbdc4cb68c27a45971b (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.cpp5
-rw-r--r--src/Compositor.hpp17
-rw-r--r--src/desktop/Popup.cpp2
-rw-r--r--src/managers/CursorManager.cpp3
-rw-r--r--src/managers/PointerManager.hpp5
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;