From: Kristian Høgsberg Date: Thu, 11 Aug 2011 21:58:59 +0000 (-0400) Subject: xserver: Clean up wm on X server exit X-Git-Tag: 0.85.0~385 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3cf1172397032767fe4915bd142352d96cf899a8;p=profile%2Fivi%2Fweston.git xserver: Clean up wm on X server exit --- 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