From 3cf1172397032767fe4915bd142352d96cf899a8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Thu, 11 Aug 2011 17:58:59 -0400 Subject: [PATCH] xserver: Clean up wm on X server exit --- compositor/xserver-launcher.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/compositor/xserver-launcher.c b/compositor/xserver-launcher.c index 02f022a..a5203b7 100644 --- a/compositor/xserver-launcher.c +++ b/compositor/xserver-launcher.c @@ -414,6 +414,7 @@ wlsc_wm_create(struct wlsc_xserver *wxs) wl_client_flush(wxs->client); close(sv[1]); + /* xcb_connect_to_fd takes ownership of the fd. */ wm->conn = xcb_connect_to_fd(sv[0], NULL); if (xcb_connection_has_error(wm->conn)) { fprintf(stderr, "xcb_connect_to_fd failed\n"); @@ -451,6 +452,16 @@ wlsc_wm_create(struct wlsc_xserver *wxs) } static void +wlsc_wm_destroy(struct wlsc_wm *wm) +{ + /* FIXME: Free windows in hash. */ + wl_hash_table_destroy(wm->window_hash); + xcb_disconnect(wm->conn); + wl_event_source_remove(wm->source); + free(wm); +} + +static void wlsc_xserver_bind(struct wl_client *client, struct wl_object *global, uint32_t version) @@ -556,6 +567,9 @@ wlsc_xserver_cleanup(struct wlsc_process *process, int status) wl_event_loop_add_fd(mxs->loop, mxs->unix_fd, WL_EVENT_READABLE, wlsc_xserver_handle_event, mxs); + + wlsc_wm_destroy(mxs->wm); + mxs->wm = NULL; } static void -- 2.7.4