[PATCH] xwayland: Fix infinite loop on quick movement through menus
Pekka Paalanen
ppaalanen at gmail.com
Wed Apr 25 01:28:28 PDT 2012
On Tue, 24 Apr 2012 22:20:26 +0200
Tomasz Borowik <timon37 at lavabit.com> wrote:
> From: timon37 <timon37 at lavabit.com>
> Date: Tue, 24 Apr 2012 22:13:38 +0200
> Subject: [PATCH] Fix infinite loop in xwl_screen_post_damage
>
> Happens when first two windows are damaged, then later one is damaged and
> the other is unrealized. It makes the damaged windows next point to itself.
>
> Triggers most often on menus or tooltips.
> ---
> hw/xfree86/xwayland/xwayland-window.c | 10 +++++++++-
> 1 files changed, 9 insertions(+), 1 deletions(-)
>
> diff --git a/hw/xfree86/xwayland/xwayland-window.c b/hw/xfree86/xwayland/xwayland-window.c
> index e58350f..8db54e1 100644
> --- a/hw/xfree86/xwayland/xwayland-window.c
> +++ b/hw/xfree86/xwayland/xwayland-window.c
> @@ -218,7 +218,7 @@ xwl_unrealize_window(WindowPtr window)
> {
> ScreenPtr screen = window->drawable.pScreen;
> struct xwl_screen *xwl_screen;
> - struct xwl_window *xwl_window;
> + struct xwl_window *xwl_window, *iter, *tmp;
> struct xwl_input_device *xwl_input_device;
> Bool ret;
>
> @@ -248,6 +248,14 @@ xwl_unrealize_window(WindowPtr window)
> wl_buffer_destroy(xwl_window->buffer);
> wl_surface_destroy(xwl_window->surface);
> xorg_list_del(&xwl_window->link);
> +
> + xorg_list_for_each_entry_safe(iter, tmp,
> + &xwl_screen->damage_window_list, link_damage) {
> + if (iter == xwl_window) {
> + xorg_list_del(&xwl_window->link_damage);
> + break;
> + }
> + }
> xorg_list_del(&xwl_window->link_damage);
This second del call seems strange, is it intentional?
> DamageUnregister(&window->drawable, xwl_window->damage);
> DamageDestroy(xwl_window->damage);
Thanks,
pq
More information about the wayland-devel
mailing list