[arch-commits] Commit in xorg-server/trunk (5 files)

Jan de Groot jgc at archlinux.org
Tue Aug 25 21:17:43 UTC 2009


    Date: Tuesday, August 25, 2009 @ 17:17:43
  Author: jgc
Revision: 50387

upgpkg: xorg-server 1.6.3-4
    Add some patches from the server16branch wiki page

Added:
  xorg-server/trunk/dix-dpmsfixes-idletime.patch
  xorg-server/trunk/glx-bug21132.patch
  xorg-server/trunk/glx-cleanup.patch
  xorg-server/trunk/xext-bug23100.patch
Modified:
  xorg-server/trunk/PKGBUILD

------------------------------+
 PKGBUILD                     |   16 +++++++++-
 dix-dpmsfixes-idletime.patch |   25 ++++++++++++++++
 glx-bug21132.patch           |   27 +++++++++++++++++
 glx-cleanup.patch            |   46 +++++++++++++++++++++++++++++
 xext-bug23100.patch          |   64 +++++++++++++++++++++++++++++++++++++++++
 5 files changed, 177 insertions(+), 1 deletion(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2009-08-25 20:33:20 UTC (rev 50386)
+++ PKGBUILD	2009-08-25 21:17:43 UTC (rev 50387)
@@ -4,7 +4,7 @@
 
 pkgname=xorg-server
 pkgver=1.6.3
-pkgrel=3
+pkgrel=4
 pkgdesc="X.Org X servers"
 arch=('i686' 'x86_64')
 license=('custom')
@@ -20,12 +20,20 @@
         xorg-redhat-die-ugly-pattern-die-die-die.patch
         hal-init-failed.patch
         xext-fix-sync-transitions.patch
+        xext-bug23100.patch
+        dix-dpmsfixes-idletime.patch
+        glx-bug21132.patch
+        glx-cleanup.patch
         xvfb-run
         xvfb-run.1)
 md5sums=('0af168abeefa6579cab20387f75c0c7a'
          '1a336eb22e27cbf443ec5a2ecddfa93c'
          '0f30199da182c531eabd5bbf1c2707e3'
          '2171fbbdb0b4c51a60ad0944351cd910'
+         'e9092737cd87aee57013a5d4dcc0e2d4'
+         '521980433509b389beb9004b2f5236e4'
+         '3f2b2576332754a3dc2c24a10e55caa7'
+         '92e17943a7300417d6576dd30eeef180'
          '52fd3effd80d7bc6c1660d4ecf23d31c'
          '376c70308715cd2643f7bff936d9934b')
 
@@ -40,6 +48,12 @@
   # Fix issue with gnome-power-manager random screen blanking
   patch -Np1 -i "${srcdir}/xext-fix-sync-transitions.patch" || return 1
 
+  # Fixes from http://wiki.x.org/wiki/Server16Branch
+  patch -Np1 -i "${srcdir}/xext-bug23100.patch" || return 1
+  patch -Np1 -i "${srcdir}/dix-dpmsfixes-idletime.patch" || return 1
+  patch -Np1 -i "${srcdir}/glx-bug21132.patch" || return 1
+  patch -Np1 -i "${srcdir}/glx-cleanup.patch" || return 1
+
   # Fix dbus config path
   sed -i -e 's/\$(sysconfdir)/\/etc/' config/Makefile.*  || return 1
 

Added: dix-dpmsfixes-idletime.patch
===================================================================
--- dix-dpmsfixes-idletime.patch	                        (rev 0)
+++ dix-dpmsfixes-idletime.patch	2009-08-25 21:17:43 UTC (rev 50387)
@@ -0,0 +1,25 @@
+From 6b5978dcf1f7ac3ecc2f22df06f7000f360e2066 Mon Sep 17 00:00:00 2001
+From: Richard Hughes <richard at hughsie.com>
+Date: Mon, 17 Aug 2009 08:15:32 +0000
+Subject: Do not reset lastDeviceEventTime when we do dixSaveScreens
+
+When we turn off DPMS with DPMSModeOff and do dixSaveScreens, don't reset the
+event time else session clients using IDLETIME will be reset.
+
+Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
+---
+diff --git a/dix/window.c b/dix/window.c
+index 32e26d9..1a645f6 100644
+--- a/dix/window.c
++++ b/dix/window.c
+@@ -3128,8 +3128,6 @@ dixSaveScreens(ClientPtr client, int on, int mode)
+ 
+     if (on == SCREEN_SAVER_FORCER)
+     {
+-	UpdateCurrentTimeIf();
+-	lastDeviceEventTime = currentTime;
+ 	if (mode == ScreenSaverReset)
+ 	    what = SCREEN_SAVER_OFF;
+ 	else
+--
+cgit v0.8.2

Added: glx-bug21132.patch
===================================================================
--- glx-bug21132.patch	                        (rev 0)
+++ glx-bug21132.patch	2009-08-25 21:17:43 UTC (rev 50387)
@@ -0,0 +1,27 @@
+From 2075d4bf9e53b8baef0b919da6c44771220cd4a5 Mon Sep 17 00:00:00 2001
+From: Michel Dänzer <daenzer at vmware.com>
+Date: Thu, 14 May 2009 09:46:41 +0000
+Subject: glx: If a destroyed window is bound to the current context, make it not current.
+
+Avoids subsequent crashes due to stale pointers to the DrawableRec, see
+https://bugs.freedesktop.org/show_bug.cgi?id=21132#c15 and previous comments.
+
+Signed-off-by: Michel Dänzer <daenzer at vmware.com>
+---
+diff --git a/glx/glxext.c b/glx/glxext.c
+index 93391e9..6bc7bef 100644
+--- a/glx/glxext.c
++++ b/glx/glxext.c
+@@ -126,6 +126,10 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid)
+     __GLXcontext *c;
+ 
+     for (c = glxAllContexts; c; c = c->next) {
++	if (c->isCurrent && (c->drawPriv == glxPriv || c->readPriv == glxPriv)) {
++	    (*c->loseCurrent)(c);
++	    __glXFlushContextCache();
++	}
+ 	if (c->drawPriv == glxPriv)
+ 	    c->drawPriv = NULL;
+ 	if (c->readPriv == glxPriv)
+--
+cgit v0.8.2

Added: glx-cleanup.patch
===================================================================
--- glx-cleanup.patch	                        (rev 0)
+++ glx-cleanup.patch	2009-08-25 21:17:43 UTC (rev 50387)
@@ -0,0 +1,46 @@
+From 3020b1d43e34fca08cd51f7c7c8ed51497d49ef3 Mon Sep 17 00:00:00 2001
+From: Michel Dänzer <daenzer at vmware.com>
+Date: Tue, 23 Jun 2009 14:45:40 +0000
+Subject: glx: Clean up more thoroughly if the drawable of a current context goes away.
+
+Fixes crash when restarting compiz, due to cl->currentContexts[x] being stale.
+---
+diff --git a/glx/glxext.c b/glx/glxext.c
+index 520eb2e..a571ec9 100644
+--- a/glx/glxext.c
++++ b/glx/glxext.c
+@@ -128,8 +128,31 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid)
+ 
+     for (c = glxAllContexts; c; c = c->next) {
+ 	if (c->isCurrent && (c->drawPriv == glxPriv || c->readPriv == glxPriv)) {
++	    int i;
++
+ 	    (*c->loseCurrent)(c);
+-	    __glXFlushContextCache();
++	    c->isCurrent = GL_FALSE;
++	    if (c == __glXLastContext)
++		__glXFlushContextCache();
++
++	    for (i = 1; i < currentMaxClients; i++) {
++		if (clients[i]) {
++		    __GLXclientState *cl = glxGetClient(clients[i]);
++
++		    if (cl->inUse) {
++			int j;
++
++			for (j = 0; j < cl->numCurrentContexts; j++) {
++			    if (cl->currentContexts[j] == c)
++				cl->currentContexts[j] = NULL;
++			}
++		    }
++		}
++	    }
++
++	    if (!c->idExists) {
++		__glXFreeContext(c);
++	    }
+ 	}
+ 	if (c->drawPriv == glxPriv)
+ 	    c->drawPriv = NULL;
+--
+cgit v0.8.2

Added: xext-bug23100.patch
===================================================================
--- xext-bug23100.patch	                        (rev 0)
+++ xext-bug23100.patch	2009-08-25 21:17:43 UTC (rev 50387)
@@ -0,0 +1,64 @@
+diff -ruN xorg-server-1.6.3/Xext/xtest.c xorg-server-1.6.3.patched/Xext/xtest.c
+--- xorg-server-1.6.3/Xext/xtest.c	2009-07-26 22:56:57.000000000 +0200
++++ xorg-server-1.6.3.patched/Xext/xtest.c	2009-08-25 22:52:11.000000000 +0200
+@@ -54,6 +54,11 @@
+ extern int DeviceValuator;
+ extern int DeviceMotionNotify;
+ 
++/* XTest events are sent during request processing and may be interruped by
++ * a SIGIO. We need a separate event list to avoid events overwriting each
++ * other's memory */
++static EventListPtr xtest_evlist;
++
+ #ifdef PANORAMIX
+ #include "panoramiX.h"
+ #include "panoramiXsrv.h"
+@@ -81,6 +86,8 @@
+     AddExtension(XTestExtensionName, 0, 0,
+             ProcXTestDispatch, SProcXTestDispatch,
+             NULL, StandardMinorOpcode);
++
++    xtest_evlist = InitEventList(GetMaximumEventsNum());
+ }
+ 
+ static int
+@@ -157,7 +164,6 @@
+     int valuators[MAX_VALUATORS] = {0};
+     int numValuators = 0;
+     int firstValuator = 0;
+-    EventListPtr events;
+     int nevents = 0;
+     int i;
+     int base = 0;
+@@ -384,27 +390,26 @@
+     if (screenIsSaved == SCREEN_SAVER_ON)
+         dixSaveScreens(serverClient, SCREEN_SAVER_OFF, ScreenSaverReset);
+ 
+-    GetEventList(&events);
+     switch(type) {
+         case MotionNotify:
+-            nevents = GetPointerEvents(events, dev, type, 0, flags,
++            nevents = GetPointerEvents(xtest_evlist, dev, type, 0, flags,
+                             firstValuator, numValuators, valuators);
+             break;
+         case ButtonPress:
+         case ButtonRelease:
+-            nevents = GetPointerEvents(events, dev, type, ev->u.u.detail,
++            nevents = GetPointerEvents(xtest_evlist, dev, type, ev->u.u.detail,
+                                        flags, firstValuator,
+                                        numValuators, valuators);
+             break;
+         case KeyPress:
+         case KeyRelease:
+-            nevents = GetKeyboardEvents(events, dev, type, ev->u.u.detail);
++            nevents = GetKeyboardEvents(xtest_evlist, dev, type, ev->u.u.detail);
+             break;
+     }
+ 
+     OsBlockSignals();
+     for (i = 0; i < nevents; i++)
+-        mieqEnqueue(dev, (events+i)->event);
++        mieqEnqueue(dev, (xtest_evlist+i)->event);
+     OsReleaseSignals();
+ 
+     return client->noClientException;




More information about the arch-commits mailing list