From b8b2c72709a16382fe7a75a3476236bd31c0e54c Mon Sep 17 00:00:00 2001 From: Harsha M M Date: Tue, 7 Aug 2018 19:05:02 +0530 Subject: [PATCH] libweston: Remove signals from the list during de-init During de-init ensure removal of added signals from list. Otherwise a dongling pointer is left behind which will affect other plugins. Signed-off-by: Harsha M M Reviewed-by: Pekka Paalanen --- compositor/text-backend.c | 3 +++ compositor/weston-screenshooter.c | 2 ++ desktop-shell/shell.c | 1 + 3 files changed, 6 insertions(+) diff --git a/compositor/text-backend.c b/compositor/text-backend.c index 54242427..4b2e8543 100644 --- a/compositor/text-backend.c +++ b/compositor/text-backend.c @@ -452,6 +452,7 @@ text_input_manager_notifier_destroy(struct wl_listener *listener, void *data) struct text_input_manager, destroy_listener); + wl_list_remove(&text_input_manager->destroy_listener.link); wl_global_destroy(text_input_manager->text_input_manager_global); free(text_input_manager); @@ -1060,6 +1061,8 @@ text_backend_configuration(struct text_backend *text_backend) WL_EXPORT void text_backend_destroy(struct text_backend *text_backend) { + wl_list_remove(&text_backend->seat_created_listener.link); + if (text_backend->input_method.client) { /* disable respawn */ wl_list_remove(&text_backend->client_listener.link); diff --git a/compositor/weston-screenshooter.c b/compositor/weston-screenshooter.c index 0994cb4f..981aff86 100644 --- a/compositor/weston-screenshooter.c +++ b/compositor/weston-screenshooter.c @@ -162,6 +162,8 @@ screenshooter_destroy(struct wl_listener *listener, void *data) struct screenshooter *shooter = container_of(listener, struct screenshooter, destroy_listener); + wl_list_remove(&shooter->destroy_listener.link); + wl_global_destroy(shooter->global); free(shooter); } diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index ea3c4535..9a447159 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -4911,6 +4911,7 @@ shell_destroy(struct wl_listener *listener, void *data) wl_client_destroy(shell->child.client); } + wl_list_remove(&shell->destroy_listener.link); wl_list_remove(&shell->idle_listener.link); wl_list_remove(&shell->wake_listener.link); wl_list_remove(&shell->transform_listener.link);