From 4738f3b1ea433ad8a9ab8550e557e43efaa28362 Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Mon, 2 Jan 2012 15:47:07 +0200 Subject: [PATCH] compositor: destroy all input binding objects on shutdown wlsc_binding_destroy() was not being called at all. Fix the leaks by introducing a function that destroys a whole list of bindings, instead of individually saving an extra pointer to the binding object and calling wlsc_binding_destroy() separately on each. Signed-off-by: Pekka Paalanen --- compositor/compositor.c | 2 ++ compositor/compositor.h | 3 +++ compositor/util.c | 9 +++++++++ 3 files changed, 14 insertions(+) diff --git a/compositor/compositor.c b/compositor/compositor.c index c4ab9db0d..980098d4f 100644 --- a/compositor/compositor.c +++ b/compositor/compositor.c @@ -2022,6 +2022,8 @@ wlsc_compositor_shutdown(struct wlsc_compositor *ec) /* Destroy all outputs associated with this compositor */ wl_list_for_each_safe(output, next, &ec->output_list, link) output->destroy(output); + + wlsc_binding_list_destroy_all(&ec->binding_list); } static int on_term_signal(int signal_number, void *data) diff --git a/compositor/compositor.h b/compositor/compositor.h index 8611b40aa..fa47489a9 100644 --- a/compositor/compositor.h +++ b/compositor/compositor.h @@ -354,6 +354,9 @@ wlsc_compositor_add_binding(struct wlsc_compositor *compositor, void wlsc_binding_destroy(struct wlsc_binding *binding); +void +wlsc_binding_list_destroy_all(struct wl_list *list); + void wlsc_compositor_run_binding(struct wlsc_compositor *compositor, struct wlsc_input_device *device, diff --git a/compositor/util.c b/compositor/util.c index 370edbc7d..4ce1774e6 100644 --- a/compositor/util.c +++ b/compositor/util.c @@ -282,6 +282,15 @@ wlsc_binding_destroy(struct wlsc_binding *binding) free(binding); } +WL_EXPORT void +wlsc_binding_list_destroy_all(struct wl_list *list) +{ + struct wlsc_binding *binding, *tmp; + + wl_list_for_each_safe(binding, tmp, list, link) + wlsc_binding_destroy(binding); +} + WL_EXPORT void wlsc_compositor_run_binding(struct wlsc_compositor *compositor, struct wlsc_input_device *device,