From eaecf7db14cff793e46c432edf68fef58b43373b Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Sun, 2 Jun 2024 18:42:54 +0200 Subject: 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. --- src/debug/HyprCtl.cpp | 7 ++++++- src/debug/HyprCtl.hpp | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'src/debug') diff --git a/src/debug/HyprCtl.cpp b/src/debug/HyprCtl.cpp index bbe5019a..4563c5a1 100644 --- a/src/debug/HyprCtl.cpp +++ b/src/debug/HyprCtl.cpp @@ -1625,6 +1625,11 @@ CHyprCtl::CHyprCtl() { startHyprCtlSocket(); } +CHyprCtl::~CHyprCtl() { + if (m_eventSource) + wl_event_source_remove(m_eventSource); +} + SP CHyprCtl::registerCommand(SHyprCtlCommand cmd) { return m_vCommands.emplace_back(makeShared(cmd)); } @@ -1805,5 +1810,5 @@ void CHyprCtl::startHyprCtlSocket() { Debug::log(LOG, "Hypr socket started at {}", socketPath); - wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, m_iSocketFD, WL_EVENT_READABLE, hyprCtlFDTick, nullptr); + m_eventSource = wl_event_loop_add_fd(g_pCompositor->m_sWLEventLoop, m_iSocketFD, WL_EVENT_READABLE, hyprCtlFDTick, nullptr); } diff --git a/src/debug/HyprCtl.hpp b/src/debug/HyprCtl.hpp index b48ea26a..21a2c5f8 100644 --- a/src/debug/HyprCtl.hpp +++ b/src/debug/HyprCtl.hpp @@ -8,6 +8,7 @@ class CHyprCtl { public: CHyprCtl(); + ~CHyprCtl(); std::string makeDynamicCall(const std::string& input); SP registerCommand(SHyprCtlCommand cmd); @@ -25,6 +26,7 @@ class CHyprCtl { void startHyprCtlSocket(); std::vector> m_vCommands; + wl_event_source* m_eventSource = nullptr; }; inline std::unique_ptr g_pHyprCtl; -- cgit v1.2.3