Hi,

the patch works for me

Tested-by: Marek Chalupa <mchqwe...@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 <a...@redhat.com> for helping tracking this down!

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93045
Signed-off-by: Olivier Fourdan <ofour...@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,

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to