[PATCH v3] xwayland: Do not set root clip when rootless

Marek Chalupa mchqwerty at gmail.com
Mon Nov 23 00:46:26 PST 2015


Hi,

the patch works for me

Tested-by: Marek Chalupa <mchqwerty at gmail.com>

Cheers,
Marek

On 11/23/2015 08:51 AM, Olivier Fourdan wrote:
> Otherwise the server may try to draw onto the root window when closing
> down, but when running rootless the root window has no storage thus
> causing a memory corruption.
>
> Thanks to Adam Jackson <ajax at redhat.com> for helping tracking this down!
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93045
> Signed-off-by: Olivier Fourdan <ofourdan at redhat.com>
> ---
> v2: SetRootClip() only if not rootless in update_screen_size()
> v3: fix indentation
>
>   hw/xwayland/xwayland-glamor.c | 4 +++-
>   hw/xwayland/xwayland-output.c | 6 ++++--
>   hw/xwayland/xwayland-shm.c    | 4 +++-
>   3 files changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/hw/xwayland/xwayland-glamor.c b/hw/xwayland/xwayland-glamor.c
> index ebaf05a..c357217 100644
> --- a/hw/xwayland/xwayland-glamor.c
> +++ b/hw/xwayland/xwayland-glamor.c
> @@ -233,9 +233,11 @@ xwl_glamor_create_screen_resources(ScreenPtr screen)
>       if (!ret)
>           return ret;
>
> -    if (xwl_screen->rootless)
> +    if (xwl_screen->rootless) {
>           screen->devPrivate =
>               fbCreatePixmap(screen, 0, 0, screen->rootDepth, 0);
> +        SetRootClip(screen, FALSE);
> +    }
>       else {
>           screen->devPrivate =
>               xwl_glamor_create_pixmap(screen, screen->width, screen->height,
> diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
> index 5ef444d..2a180f2 100644
> --- a/hw/xwayland/xwayland-output.c
> +++ b/hw/xwayland/xwayland-output.c
> @@ -164,7 +164,7 @@ update_screen_size(struct xwl_output *xwl_output, int width, int height)
>       struct xwl_screen *xwl_screen = xwl_output->xwl_screen;
>       double mmpd;
>
> -    if (xwl_screen->screen->root)
> +    if (!xwl_screen->rootless)
>           SetRootClip(xwl_screen->screen, FALSE);
>
>       xwl_screen->width = width;
> @@ -184,11 +184,13 @@ update_screen_size(struct xwl_output *xwl_output, int width, int height)
>       if (xwl_screen->screen->root) {
>           xwl_screen->screen->root->drawable.width = width;
>           xwl_screen->screen->root->drawable.height = height;
> -        SetRootClip(xwl_screen->screen, TRUE);
>           RRScreenSizeNotify(xwl_screen->screen);
>       }
>
>       update_desktop_dimensions();
> +
> +    if (!xwl_screen->rootless)
> +        SetRootClip(xwl_screen->screen, TRUE);
>   }
>
>   static void
> diff --git a/hw/xwayland/xwayland-shm.c b/hw/xwayland/xwayland-shm.c
> index 1022c0d..7072be4 100644
> --- a/hw/xwayland/xwayland-shm.c
> +++ b/hw/xwayland/xwayland-shm.c
> @@ -279,9 +279,11 @@ xwl_shm_create_screen_resources(ScreenPtr screen)
>       if (!ret)
>           return ret;
>
> -    if (xwl_screen->rootless)
> +    if (xwl_screen->rootless) {
>           screen->devPrivate =
>               fbCreatePixmap(screen, 0, 0, screen->rootDepth, 0);
> +        SetRootClip(screen, FALSE);
> +    }
>       else
>           screen->devPrivate =
>               xwl_shm_create_pixmap(screen, screen->width, screen->height,
>


More information about the xorg-devel mailing list