From b0c2bbebd1c4c50173a01175d049842b79ee7e1b Mon Sep 17 00:00:00 2001 From: Dominique Martinet Date: Sat, 17 Mar 2018 17:06:03 +0100 Subject: [PATCH] x11 backend: fix various leaks - xcb_query_pointer_reply return value needs to be freed - call XCloseDisplay - remove wl event_source --- backend/x11/backend.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/backend/x11/backend.c b/backend/x11/backend.c index cb29e518..dd2c0a6e 100644 --- a/backend/x11/backend.c +++ b/backend/x11/backend.c @@ -143,6 +143,7 @@ static bool handle_x11_event(struct wlr_x11_backend *x11, xcb_generic_event_t *e }; wlr_signal_emit_safe(&x11->pointer.events.motion_absolute, &abs); + free(pointer); break; } case XCB_CLIENT_MESSAGE: { @@ -317,12 +318,20 @@ static void wlr_x11_backend_destroy(struct wlr_backend *backend) { wlr_signal_emit_safe(&backend->events.destroy, backend); + if (x11->event_source) { + wl_event_source_remove(x11->event_source); + } wl_list_remove(&x11->display_destroy.link); wl_event_source_remove(x11->frame_timer); wlr_egl_finish(&x11->egl); - xcb_disconnect(x11->xcb_conn); + if (x11->xcb_conn) { + xcb_disconnect(x11->xcb_conn); + } + if (x11->xlib_conn) { + XCloseDisplay(x11->xlib_conn); + } free(x11); }