xwm: remove the destroy listener from the old surface signal
diff --git a/src/xwayland/window-manager.c b/src/xwayland/window-manager.c
index 9667c6f..2c1c9e0 100644
--- a/src/xwayland/window-manager.c
+++ b/src/xwayland/window-manager.c
@@ -2159,6 +2159,12 @@
 
 	weston_wm_window_read_properties(window);
 
+	/* A weston_wm_window may have many different surfaces assigned
+	 * throughout its life, so we must make sure to remove the listener
+	 * from the old surface signal list. */
+	if (window->surface)
+		wl_list_remove(&window->surface_destroy_listener.link);
+
 	window->surface = (struct weston_surface *) surface;
 	window->surface_destroy_listener.notify = surface_destroy;
 	wl_signal_add(&surface->destroy_signal,