[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