From: Pekka Paalanen Date: Thu, 19 Oct 2017 07:26:27 +0000 (+0300) Subject: compositor-wayland: actually free parent_output X-Git-Tag: upstream/5.0.0~419 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f13227945515f3d2f654573bda861505e86e6ffa;p=platform%2Fupstream%2Fweston.git compositor-wayland: actually free parent_output I could not find anywhere where struct parent_output was freed, so apparently we were leaking it. Check against wayland_backend_register_output() and add the missing clean-up: removal from the parent output list, and free(). registry_handle_global_remove() also needs fixing to use a safer loop, because now we are actually removing the list item. Signed-off-by: Pekka Paalanen Reviewed-by: Quentin Glidic Acked-by: Daniel Stone --- diff --git a/libweston/compositor-wayland.c b/libweston/compositor-wayland.c index c0f67e9..9486dea 100644 --- a/libweston/compositor-wayland.c +++ b/libweston/compositor-wayland.c @@ -2333,6 +2333,9 @@ wayland_parent_output_destroy(struct wayland_parent_output *output) wl_list_remove(&mode->link); free(mode); } + + wl_list_remove(&output->link); + free(output); } static void @@ -2385,9 +2388,9 @@ registry_handle_global_remove(void *data, struct wl_registry *registry, uint32_t name) { struct wayland_backend *b = data; - struct wayland_parent_output *output; + struct wayland_parent_output *output, *next; - wl_list_for_each(output, &b->parent.output_list, link) + wl_list_for_each_safe(output, next, &b->parent.output_list, link) if (output->id == name) wayland_parent_output_destroy(output); }