From 4728525ece3a2ed57d30d984ee3a9e1a4c977233 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Fri, 7 Nov 2025 16:20:29 -0500 Subject: [PATCH] fix: Fix memory leak in EventQueue Previously empty event targets were never fully removed from EventQueue even after unregistration. This may lead to unbounded increase of memory use if new event targets are allocated to new memory locations. ported: https://github.com/input-leap/input-leap/pull/1587/commits/c960360106ba11134210d30942abf47d452033c1 --- src/lib/base/EventQueue.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/base/EventQueue.cpp b/src/lib/base/EventQueue.cpp index 6b572d5ed..b5e3feac1 100644 --- a/src/lib/base/EventQueue.cpp +++ b/src/lib/base/EventQueue.cpp @@ -274,6 +274,9 @@ void EventQueue::removeHandler(EventTypes type, void *target) if (index2 != typeHandlers.end()) { typeHandlers.erase(index2); } + if (typeHandlers.empty()) { + m_handlers.erase(index); + } } } @@ -282,7 +285,7 @@ void EventQueue::removeHandlers(void *target) std::scoped_lock lock{m_mutex}; HandlerTable::iterator index = m_handlers.find(target); if (index != m_handlers.end()) { - index->second.clear(); + m_handlers.erase(index); } }