diff options
| author | Tom Englund <tomenglund26@gmail.com> | 2024-06-02 18:42:54 +0200 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2024-06-03 18:46:20 +0200 |
| commit | eaecf7db14cff793e46c432edf68fef58b43373b (patch) | |
| tree | dd3ae4a05f0a7bea5478a9b726a621926609de10 /src/managers/eventLoop/EventLoopManager.cpp | |
| parent | e08195d240f54049745c503ba736cf99a9c09b25 (diff) | |
core: fix a few asan reported issues and a coredump on exit (#6285)
* xwayland: add destructor to CXWM and free resource
the wl_event_resource was running upon destruction of the compositor
causing a null pointer segfault in onX11Event so ensure the event is
removed upon destruction, also free the memory allocated by
xcb_errors_context_new and finally call xcb_disconnect on the connection
to free the fd and its memory.
* hyprctl: dont leak the fd on destruction
add a destructor and properly free the fd on destruction
* eventloop: add destructor and free event source
properly free the wl_event_source upon destruction.
Diffstat (limited to 'src/managers/eventLoop/EventLoopManager.cpp')
| -rw-r--r-- | src/managers/eventLoop/EventLoopManager.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/managers/eventLoop/EventLoopManager.cpp b/src/managers/eventLoop/EventLoopManager.cpp index 5910e71a..1193ffb8 100644 --- a/src/managers/eventLoop/EventLoopManager.cpp +++ b/src/managers/eventLoop/EventLoopManager.cpp @@ -13,6 +13,11 @@ CEventLoopManager::CEventLoopManager() { m_sTimers.timerfd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC); } +CEventLoopManager::~CEventLoopManager() { + if (m_sWayland.eventSource) + wl_event_source_remove(m_sWayland.eventSource); +} + static int timerWrite(int fd, uint32_t mask, void* data) { g_pEventLoopManager->onTimerFire(); return 1; @@ -22,7 +27,7 @@ void CEventLoopManager::enterLoop(wl_display* display, wl_event_loop* wlEventLoo m_sWayland.loop = wlEventLoop; m_sWayland.display = display; - wl_event_loop_add_fd(wlEventLoop, m_sTimers.timerfd, WL_EVENT_READABLE, timerWrite, nullptr); + m_sWayland.eventSource = wl_event_loop_add_fd(wlEventLoop, m_sTimers.timerfd, WL_EVENT_READABLE, timerWrite, nullptr); wl_display_run(display); |
