[arch-commits] Commit in xorg-server/trunk (PKGBUILD bug99358.patch)

Jan de Groot jgc at archlinux.org
Wed Feb 8 11:52:57 UTC 2017


    Date: Wednesday, February 8, 2017 @ 11:52:56
  Author: jgc
Revision: 288241

upgpkg: xorg-server 1.19.1-2

Add upstream fix for FS#52808 from master

Added:
  xorg-server/trunk/bug99358.patch
Modified:
  xorg-server/trunk/PKGBUILD

----------------+
 PKGBUILD       |   12 +++-
 bug99358.patch |  162 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 173 insertions(+), 1 deletion(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2017-02-08 10:41:46 UTC (rev 288240)
+++ PKGBUILD	2017-02-08 11:52:56 UTC (rev 288241)
@@ -5,7 +5,7 @@
 pkgbase=xorg-server
 pkgname=('xorg-server' 'xorg-server-xephyr' 'xorg-server-xdmx' 'xorg-server-xvfb' 'xorg-server-xnest' 'xorg-server-xwayland' 'xorg-server-common' 'xorg-server-devel')
 pkgver=1.19.1
-pkgrel=1
+pkgrel=2
 arch=('i686' 'x86_64')
 license=('custom')
 groups=('xorg')
@@ -18,6 +18,7 @@
              'xcb-util' 'xcb-util-image' 'xcb-util-renderutil' 'xcb-util-wm' 'xcb-util-keysyms' 'dri3proto'
              'libxshmfence' 'libunwind' 'systemd' 'wayland-protocols')
 source=(https://xorg.freedesktop.org/releases/individual/xserver/${pkgbase}-${pkgver}.tar.bz2{,.sig}
+        bug99358.patch
         xvfb-run
         xvfb-run.1)
 validpgpkeys=('7B27A3F1A6E18CD9588B4AE8310180050905E40C'
@@ -25,9 +26,18 @@
               'DD38563A8A8224537D1F90E45B8A2D50A0ECD0D3')
 sha256sums=('79ae2cf39d3f6c4a91201d8dad549d1d774b3420073c5a70d390040aa965a7fb'
             'SKIP'
+            'f46a9d1a5ac43c5359fbd8c57b6e64b0bd313116b5cb638527bfe3701e6c3904'
             'ff0156309470fc1d378fd2e104338020a884295e285972cc88e250e031cc35b9'
             '2460adccd3362fefd4cdc5f1c70f332d7b578091fb9167bf88b5f91265bbd776')
 
+prepare() {
+  cd "${pkgbase}-${pkgver}"
+
+  # https://bugs.freedesktop.org/show_bug.cgi?id=99358
+  # https://bugs.archlinux.org/task/52808
+  patch -Np1 -i ../bug99358.patch
+}
+
 build() {
   cd "${pkgbase}-${pkgver}"
   ./configure --prefix=/usr \

Added: bug99358.patch
===================================================================
--- bug99358.patch	                        (rev 0)
+++ bug99358.patch	2017-02-08 11:52:56 UTC (rev 288241)
@@ -0,0 +1,162 @@
+From 7198a6d4e74f684cb383b3e0f70dd2bae405e6e7 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris at chris-wilson.co.uk>
+Date: Mon, 16 Jan 2017 22:17:36 +0000
+Subject: xfree86: Take the input lock for xf86RecolorCursor
+
+xf86RecolorCursor() may be called directly from XRecolorCursor as well
+as from xf86ScreenSetCursor(). In the latter case, the input lock is
+already held, but not for the former and so we need to add a wrapper
+function that acquires the input lock before performing
+xf86RecolorCursor()
+
+References: https://bugs.freedesktop.org/show_bug.cgi?id=99358
+
+diff --git a/hw/xfree86/ramdac/xf86HWCurs.c b/hw/xfree86/ramdac/xf86HWCurs.c
+index 4481320..55d5861 100644
+--- a/hw/xfree86/ramdac/xf86HWCurs.c
++++ b/hw/xfree86/ramdac/xf86HWCurs.c
+@@ -22,6 +22,9 @@
+ 
+ #include "servermd.h"
+ 
++static void
++xf86RecolorCursor_locked(xf86CursorScreenPtr ScreenPriv, CursorPtr pCurs);
++
+ static CARD32
+ xf86ReverseBitOrder(CARD32 v)
+ {
+@@ -204,7 +207,7 @@ xf86ScreenSetCursor(ScreenPtr pScreen, CursorPtr pCurs, int x, int y)
+         if (!xf86DriverLoadCursorImage (infoPtr, bits))
+             return FALSE;
+ 
+-    xf86RecolorCursor(pScreen, pCurs, 1);
++    xf86RecolorCursor_locked (ScreenPriv, pCurs);
+ 
+     (*infoPtr->SetCursorPosition) (infoPtr->pScrn, x, y);
+ 
+@@ -312,12 +315,9 @@ xf86MoveCursor(ScreenPtr pScreen, int x, int y)
+     input_unlock();
+ }
+ 
+-void
+-xf86RecolorCursor(ScreenPtr pScreen, CursorPtr pCurs, Bool displayed)
++static void
++xf86RecolorCursor_locked(xf86CursorScreenPtr ScreenPriv, CursorPtr pCurs)
+ {
+-    xf86CursorScreenPtr ScreenPriv =
+-        (xf86CursorScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
+-                                               xf86CursorScreenKey);
+     xf86CursorInfoPtr infoPtr = ScreenPriv->CursorInfoPtr;
+ 
+     /* recoloring isn't applicable to ARGB cursors and drivers
+@@ -357,6 +357,18 @@ xf86RecolorCursor(ScreenPtr pScreen, CursorPtr pCurs, Bool displayed)
+     }
+ }
+ 
++void
++xf86RecolorCursor(ScreenPtr pScreen, CursorPtr pCurs, Bool displayed)
++{
++    xf86CursorScreenPtr ScreenPriv =
++        (xf86CursorScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
++                                               xf86CursorScreenKey);
++
++    input_lock();
++    xf86RecolorCursor_locked (ScreenPriv, pCurs);
++    input_unlock();
++}
++
+ /* These functions assume that MaxWidth is a multiple of 32 */
+ static unsigned char *
+ RealizeCursorInterleave0(xf86CursorInfoPtr infoPtr, CursorPtr pCurs)
+-- 
+cgit v0.10.2
+
+From cfddd919cce4178baba07959e5e862d02e166522 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris at chris-wilson.co.uk>
+Date: Mon, 16 Jan 2017 22:36:34 +0000
+Subject: xfree86: Take input lock for xf86TransparentCursor
+
+
+diff --git a/hw/xfree86/ramdac/xf86HWCurs.c b/hw/xfree86/ramdac/xf86HWCurs.c
+index 55d5861..26dc7e5 100644
+--- a/hw/xfree86/ramdac/xf86HWCurs.c
++++ b/hw/xfree86/ramdac/xf86HWCurs.c
+@@ -261,6 +261,8 @@ xf86SetTransparentCursor(ScreenPtr pScreen)
+                                                xf86CursorScreenKey);
+     xf86CursorInfoPtr infoPtr = ScreenPriv->CursorInfoPtr;
+ 
++    input_lock();
++
+     if (!ScreenPriv->transparentData)
+         ScreenPriv->transparentData =
+             (*infoPtr->RealizeCursor) (infoPtr, NullCursor);
+@@ -273,6 +275,8 @@ xf86SetTransparentCursor(ScreenPtr pScreen)
+                                    ScreenPriv->transparentData);
+ 
+     (*infoPtr->ShowCursor) (infoPtr->pScrn);
++
++    input_unlock();
+ }
+ 
+ static void
+-- 
+cgit v0.10.2
+
+From 3eb964e25243056dd998f52d3b00171b71c89189 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris at chris-wilson.co.uk>
+Date: Fri, 20 Jan 2017 09:49:19 +0000
+Subject: xfree86: Take input_lock() for xf86ScreenCheckHWCursor
+
+
+diff --git a/hw/xfree86/ramdac/xf86HWCurs.c b/hw/xfree86/ramdac/xf86HWCurs.c
+index 26dc7e5..7043a9c 100644
+--- a/hw/xfree86/ramdac/xf86HWCurs.c
++++ b/hw/xfree86/ramdac/xf86HWCurs.c
+@@ -139,9 +139,14 @@ Bool
+ xf86CheckHWCursor(ScreenPtr pScreen, CursorPtr cursor, xf86CursorInfoPtr infoPtr)
+ {
+     ScreenPtr pSlave;
++    Bool use_hw_cursor = TRUE;
+ 
+-    if (!xf86ScreenCheckHWCursor(pScreen, cursor, infoPtr))
+-        return FALSE;
++    input_lock();
++
++    if (!xf86ScreenCheckHWCursor(pScreen, cursor, infoPtr)) {
++        use_hw_cursor = FALSE;
++	goto unlock;
++    }
+ 
+     /* ask each driver consuming a pixmap if it can support HW cursor */
+     xorg_list_for_each_entry(pSlave, &pScreen->slave_list, slave_head) {
+@@ -151,14 +156,22 @@ xf86CheckHWCursor(ScreenPtr pScreen, CursorPtr cursor, xf86CursorInfoPtr infoPtr
+             continue;
+ 
+         sPriv = dixLookupPrivate(&pSlave->devPrivates, xf86CursorScreenKey);
+-        if (!sPriv) /* NULL if Option "SWCursor", possibly other conditions */
+-            return FALSE;
++        if (!sPriv) { /* NULL if Option "SWCursor", possibly other conditions */
++            use_hw_cursor = FALSE;
++	    break;
++	}
+ 
+         /* FALSE if HWCursor not supported by slave */
+-        if (!xf86ScreenCheckHWCursor(pSlave, cursor, sPriv->CursorInfoPtr))
+-            return FALSE;
++        if (!xf86ScreenCheckHWCursor(pSlave, cursor, sPriv->CursorInfoPtr)) {
++            use_hw_cursor = FALSE;
++	    break;
++	}
+     }
+-    return TRUE;
++
++unlock:
++    input_unlock();
++
++    return use_hw_cursor;
+ }
+ 
+ static Bool
+-- 
+cgit v0.10.2
+



More information about the arch-commits mailing list