libweston: Remove signals from the list during de-init
authorHarsha M M <harsha.manjulamallikarjun@in.bosch.com>
Tue, 7 Aug 2018 13:35:02 +0000 (19:05 +0530)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Wed, 8 Aug 2018 09:22:24 +0000 (12:22 +0300)
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 <harsha.manjulamallikarjun@in.bosch.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
compositor/text-backend.c
compositor/weston-screenshooter.c
desktop-shell/shell.c

index 5424242..4b2e854 100644 (file)
@@ -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);
index 0994cb4..981aff8 100644 (file)
@@ -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);
 }
index ea3c453..9a44715 100644 (file)
@@ -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);