diff options
author | Tom Englund <[email protected]> | 2024-06-02 18:42:54 +0200 |
---|---|---|
committer | Vaxry <[email protected]> | 2024-06-03 18:46:20 +0200 |
commit | eaecf7db14cff793e46c432edf68fef58b43373b (patch) | |
tree | dd3ae4a05f0a7bea5478a9b726a621926609de10 /src/xwayland | |
parent | e08195d240f54049745c503ba736cf99a9c09b25 (diff) | |
download | Hyprland-eaecf7db14cff793e46c432edf68fef58b43373b.tar.gz Hyprland-eaecf7db14cff793e46c432edf68fef58b43373b.zip |
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/xwayland')
-rw-r--r-- | src/xwayland/XWM.cpp | 11 | ||||
-rw-r--r-- | src/xwayland/XWM.hpp | 1 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/xwayland/XWM.cpp b/src/xwayland/XWM.cpp index b0f8d6aa..5dfd4839 100644 --- a/src/xwayland/XWM.cpp +++ b/src/xwayland/XWM.cpp @@ -837,6 +837,17 @@ CXWM::CXWM() { xcb_flush(connection); } +CXWM::~CXWM() { + if (errors) + xcb_errors_context_free(errors); + + if (connection) + xcb_disconnect(connection); + + if (eventSource) + wl_event_source_remove(eventSource); +} + void CXWM::setActiveWindow(xcb_window_t window) { xcb_change_property(connection, XCB_PROP_MODE_REPLACE, screen->root, HYPRATOMS["_NET_ACTIVE_WINDOW"], HYPRATOMS["WINDOW"], 32, 1, &window); } diff --git a/src/xwayland/XWM.hpp b/src/xwayland/XWM.hpp index b312f4a9..1d695a15 100644 --- a/src/xwayland/XWM.hpp +++ b/src/xwayland/XWM.hpp @@ -60,6 +60,7 @@ struct SXSelection { class CXWM { public: CXWM(); + ~CXWM(); int onEvent(int fd, uint32_t mask); |