From 134f708c55be1ce05bcf572dcef2f76da27be5c4 Mon Sep 17 00:00:00 2001 From: Versus Void Date: Thu, 5 Oct 2017 19:02:18 +0000 Subject: [PATCH] Fix double free --- types/wlr_seat.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/types/wlr_seat.c b/types/wlr_seat.c index 2d0bb01c..bb24fa15 100644 --- a/types/wlr_seat.c +++ b/types/wlr_seat.c @@ -262,6 +262,8 @@ static void pointer_surface_destroy_notify(struct wl_listener *listener, void *data) { struct wlr_seat_pointer_state *state = wl_container_of( listener, state, surface_destroy); + wl_list_remove(&state->surface_destroy.link); + wl_list_init(&state->surface_destroy.link); state->focused_surface = NULL; wlr_seat_pointer_clear_focus(state->wlr_seat); } @@ -270,6 +272,8 @@ static void pointer_resource_destroy_notify(struct wl_listener *listener, void *data) { struct wlr_seat_pointer_state *state = wl_container_of( listener, state, resource_destroy); + wl_list_remove(&state->resource_destroy.link); + wl_list_init(&state->resource_destroy.link); state->focused_surface = NULL; wlr_seat_pointer_clear_focus(state->wlr_seat); } @@ -499,6 +503,8 @@ static void keyboard_surface_destroy_notify(struct wl_listener *listener, void *data) { struct wlr_seat_keyboard_state *state = wl_container_of( listener, state, surface_destroy); + wl_list_remove(&state->surface_destroy.link); + wl_list_init(&state->surface_destroy.link); state->focused_surface = NULL; wlr_seat_keyboard_clear_focus(state->wlr_seat); } @@ -507,6 +513,8 @@ static void keyboard_resource_destroy_notify(struct wl_listener *listener, void *data) { struct wlr_seat_keyboard_state *state = wl_container_of( listener, state, resource_destroy); + wl_list_remove(&state->resource_destroy.link); + wl_list_init(&state->resource_destroy.link); state->focused_surface = NULL; wlr_seat_keyboard_clear_focus(state->wlr_seat); }