summaryrefslogtreecommitdiff
path: root/src/managers/PointerManager.cpp
diff options
context:
space:
mode:
authorTom Englund <tomenglund26@gmail.com>2024-05-23 21:19:14 +0200
committerGitHub <noreply@github.com>2024-05-23 21:19:14 +0200
commit4e42107d25dc47ee94da282db233f85f1e4c6bd0 (patch)
tree6cf7f63ffbbb86652272fdfa6d2a0adac9e840e3 /src/managers/PointerManager.cpp
parenteea0a6a70412574baabea2b83d2c52003c98d46f (diff)
pointermgr: ensure compositor exist on destroy (#6216)
on exit of hyprland the CMonitor destroy signal comes after the compositor has been destructed, causing a heap use after free. add if check to ensure compositor exist and isnt shutting down when its triggered.
Diffstat (limited to 'src/managers/PointerManager.cpp')
-rw-r--r--src/managers/PointerManager.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/managers/PointerManager.cpp b/src/managers/PointerManager.cpp
index ae17c6d6..636eab1d 100644
--- a/src/managers/PointerManager.cpp
+++ b/src/managers/PointerManager.cpp
@@ -131,7 +131,11 @@ CPointerManager::CPointerManager() {
PMONITOR->events.modeChanged.registerStaticListener([this](void* owner, std::any data) { onMonitorLayoutChange(); }, nullptr);
PMONITOR->events.disconnect.registerStaticListener([this](void* owner, std::any data) { onMonitorLayoutChange(); }, nullptr);
PMONITOR->events.destroy.registerStaticListener(
- [this](void* owner, std::any data) { std::erase_if(monitorStates, [](const auto& other) { return other->monitor.expired(); }); }, nullptr);
+ [this](void* owner, std::any data) {
+ if (g_pCompositor && !g_pCompositor->m_bIsShuttingDown)
+ std::erase_if(monitorStates, [](const auto& other) { return other->monitor.expired(); });
+ },
+ nullptr);
});
}