From ebe25686b7ea26a5430f6db7fdb7191b51b3787a Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Apr 24 2008 06:47:31 +0000 Subject: * Thu Apr 24 2008 Dave Airlie 1.4.99.901-25.20080415 - xserver-1.5.0-f-spot-screws-glx.patch: stop GLX crashing X server when f-spot exists (#443299) --- diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 8c6e1e1..1dee95c 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -20,7 +20,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.4.99.901 -Release: 24.%{gitdate}%{?dist} +Release: 25.%{gitdate}%{?dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -54,6 +54,7 @@ Patch2013: xserver-1.4.99-document-fontpath-correctly.patch # Trivial things to maybe merge upstream at next rebase Patch3000: xserver-1.5.0-stenciled-visuals.patch Patch3001: xserver-1.5.0-glcore-swap-no-crashy.patch +Patch3002: xserver-1.5.0-f-spot-screws-glx.patch # Trivial things to never merge upstream ever # Don't merge this without protecting the gccisms. @@ -515,6 +516,10 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Thu Apr 24 2008 Dave Airlie 1.4.99.901-25.20080415 +- xserver-1.5.0-f-spot-screws-glx.patch: stop GLX crashing X server when + f-spot exists (#443299) + * Wed Apr 23 2008 Dave Airlie 1.4.99.901-24.20080415 - xserver-1.5.0-glcore-swap-no-crashy.patch: Fix issue with googleearth crashing GLcore. diff --git a/xserver-1.5.0-f-spot-screws-glx.patch b/xserver-1.5.0-f-spot-screws-glx.patch new file mode 100644 index 0000000..7b9f943 --- /dev/null +++ b/xserver-1.5.0-f-spot-screws-glx.patch @@ -0,0 +1,86 @@ +From ae982a27e4059fecd4048d245e6aa02f8dcc97d0 Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Thu, 24 Apr 2008 16:37:29 +1000 +Subject: [PATCH] glx: test for valid read and draw privates before using them + +this should fix a bug where f-spot exiting blows up the X server +--- + GL/glx/glxutil.c | 58 +++++++++++++++++++++++++++-------------------------- + 1 files changed, 30 insertions(+), 28 deletions(-) + +diff --git a/GL/glx/glxutil.c b/GL/glx/glxutil.c +index 11e9f89..aa23a95 100644 +--- a/GL/glx/glxutil.c ++++ b/GL/glx/glxutil.c +@@ -81,38 +81,40 @@ __glXDeassociateContext(__GLXcontext *glxc) + __GLXcontext *curr, *prev; + + prev = NULL; +- for ( curr = glxc->drawPriv->drawGlxc +- ; curr != NULL +- ; prev = curr, curr = curr->nextDrawPriv ) { +- if (curr == glxc) { +- /* found context. Deassociate. */ +- if (prev == NULL) { +- glxc->drawPriv->drawGlxc = curr->nextDrawPriv; +- } else { +- prev->nextDrawPriv = curr->nextDrawPriv; ++ if (glxc->drawPriv) { ++ for ( curr = glxc->drawPriv->drawGlxc; curr != NULL ++ ; prev = curr, curr = curr->nextDrawPriv ) { ++ if (curr == glxc) { ++ /* found context. Deassociate. */ ++ if (prev == NULL) { ++ glxc->drawPriv->drawGlxc = curr->nextDrawPriv; ++ } else { ++ prev->nextDrawPriv = curr->nextDrawPriv; ++ } ++ curr->nextDrawPriv = NULL; ++ __glXUnrefDrawable(glxc->drawPriv); ++ break; + } +- curr->nextDrawPriv = NULL; +- __glXUnrefDrawable(glxc->drawPriv); +- break; +- } ++ } + } + +- + prev = NULL; +- for ( curr = glxc->readPriv->readGlxc +- ; curr != NULL +- ; prev = curr, curr = curr->nextReadPriv ) { +- if (curr == glxc) { +- /* found context. Deassociate. */ +- if (prev == NULL) { +- glxc->readPriv->readGlxc = curr->nextReadPriv; +- } else { +- prev->nextReadPriv = curr->nextReadPriv; +- } +- curr->nextReadPriv = NULL; +- __glXUnrefDrawable(glxc->readPriv); +- break; +- } ++ if (glxc->readPriv) { ++ for ( curr = glxc->readPriv->readGlxc ++ ; curr != NULL ++ ; prev = curr, curr = curr->nextReadPriv ) { ++ if (curr == glxc) { ++ /* found context. Deassociate. */ ++ if (prev == NULL) { ++ glxc->readPriv->readGlxc = curr->nextReadPriv; ++ } else { ++ prev->nextReadPriv = curr->nextReadPriv; ++ } ++ curr->nextReadPriv = NULL; ++ __glXUnrefDrawable(glxc->readPriv); ++ break; ++ } ++ } + } + } + +-- +1.5.4.1 +