From b0c2bbebd1c4c50173a01175d049842b79ee7e1b Mon Sep 17 00:00:00 2001
From: Dominique Martinet <asmadeus@codewreck.org>
Date: Sat, 17 Mar 2018 17:06:03 +0100
Subject: 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(-)

(limited to 'backend')

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);
 }
 
-- 
cgit v1.2.3