use wl_list_for_each_safe() to unlink client surfaces

This commit is contained in:
Tony Crisci 2017-09-17 09:42:27 -04:00
parent 94d4b9249c
commit f46befec7c

View file

@ -632,14 +632,11 @@ static struct zxdg_shell_v6_interface xdg_shell_impl = {
static void wlr_xdg_client_v6_destroy(struct wl_resource *resource) { static void wlr_xdg_client_v6_destroy(struct wl_resource *resource) {
struct wlr_xdg_client_v6 *client = wl_resource_get_user_data(resource); struct wlr_xdg_client_v6 *client = wl_resource_get_user_data(resource);
struct wl_list *list = &client->surfaces;
struct wl_list *link, *tmp;
for (link = list->next, tmp = link->next; struct wlr_xdg_surface_v6 *surface, *tmp = NULL;
link != list; wl_list_for_each_safe(surface, tmp, &client->surfaces, link) {
link = tmp, tmp = link->next) { wl_list_remove(&surface->link);
wl_list_remove(link); wl_list_init(&surface->link);
wl_list_init(link);
} }
if (client->ping_timer != NULL) { if (client->ping_timer != NULL) {