On Wed, 21 May 2014 09:20:02 -0700
"U. Artie Eoff" <ullysses.a.e...@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.e...@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
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to