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 <pekka.paalanen@collabora.co.uk> Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net> Acked-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
@@ -2333,6 +2333,9 @@ wayland_parent_output_destroy(struct wayland_parent_output *output)
|
|||||||
wl_list_remove(&mode->link);
|
wl_list_remove(&mode->link);
|
||||||
free(mode);
|
free(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wl_list_remove(&output->link);
|
||||||
|
free(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -2385,9 +2388,9 @@ registry_handle_global_remove(void *data, struct wl_registry *registry,
|
|||||||
uint32_t name)
|
uint32_t name)
|
||||||
{
|
{
|
||||||
struct wayland_backend *b = data;
|
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)
|
if (output->id == name)
|
||||||
wayland_parent_output_destroy(output);
|
wayland_parent_output_destroy(output);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user