diff options
| author | Tom Englund <tomenglund26@gmail.com> | 2024-05-23 21:19:14 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-23 21:19:14 +0200 |
| commit | 4e42107d25dc47ee94da282db233f85f1e4c6bd0 (patch) | |
| tree | 6cf7f63ffbbb86652272fdfa6d2a0adac9e840e3 /src/managers/PointerManager.cpp | |
| parent | eea0a6a70412574baabea2b83d2c52003c98d46f (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.cpp | 6 |
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); }); } |
