[PATCH weston] comp-wayland: use safe foreach when destroying outputs
Pekka Paalanen
ppaalanen at gmail.com
Fri May 23 00:03:00 PDT 2014
On Wed, 21 May 2014 09:20:02 -0700
"U. Artie Eoff" <ullysses.a.eoff at intel.com> wrote:
> wl_list_for_each dereference's output to increment the
> next iteration of the loop. However, output is free'd
> inside the loop resulting in a dereference to free'd
> memory.
>
> Use wl_list_for_each_safe instead, which is designed to
> handle this kind of pattern.
>
> Signed-off-by: U. Artie Eoff <ullysses.a.eoff at intel.com>
> ---
> src/compositor-wayland.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c
> index a08b71a..76e5396 100644
> --- a/src/compositor-wayland.c
> +++ b/src/compositor-wayland.c
> @@ -1997,9 +1997,9 @@ err_free:
> static void
> wayland_compositor_destroy(struct wayland_compositor *c)
> {
> - struct weston_output *output;
> + struct weston_output *output, *next;
>
> - wl_list_for_each(output, &c->base.output_list, link)
> + wl_list_for_each_safe(output, next, &c->base.output_list, link)
> wayland_output_destroy(output);
>
> c->base.renderer->destroy(&c->base);
The DRM, x11 and rpi backends do not do this at all. Instead they rely
on weston_compositor_shutdown() to destroy all outputs and the renderer.
Is there a reason why the wayland backend is different?
Thanks,
pq
More information about the wayland-devel
mailing list