[PATCH weston 05/10] compositor-wayland: actually free parent_output

Pekka Paalanen ppaalanen at gmail.com
Tue Oct 24 10:16:02 UTC 2017


From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>

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 <pekka.paalanen at collabora.co.uk>
---
 libweston/compositor-wayland.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libweston/compositor-wayland.c b/libweston/compositor-wayland.c
index c0f67e9a..9486deae 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);
 }
-- 
2.13.6



More information about the wayland-devel mailing list