Module Name: xsrc
Committed By: mrg
Date: Tue Aug 2 07:13:20 UTC 2011
Modified Files:
xsrc/external/mit/xorg-server/dist/glx: glxcmds.c glxdrawable.h
glxext.c
Log Message:
revert the change below, to help merge 1.10.3. there's a new version of
this coming up shortly:
http://mail-index.netbsd.org/source-changes/2011/03/18/msg020067.html
Log Message:
Pull up fix from https://bugs.freedesktop.org/show_bug.cgi?id=28181 to
prevent random segfaults of the X server when using composite with the
ati driver.
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 xsrc/external/mit/xorg-server/dist/glx/glxcmds.c
cvs rdiff -u -r1.2 -r1.3 xsrc/external/mit/xorg-server/dist/glx/glxdrawable.h \
xsrc/external/mit/xorg-server/dist/glx/glxext.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: xsrc/external/mit/xorg-server/dist/glx/glxcmds.c
diff -u xsrc/external/mit/xorg-server/dist/glx/glxcmds.c:1.3 xsrc/external/mit/xorg-server/dist/glx/glxcmds.c:1.4
--- xsrc/external/mit/xorg-server/dist/glx/glxcmds.c:1.3 Sun Jul 24 01:33:36 2011
+++ xsrc/external/mit/xorg-server/dist/glx/glxcmds.c Tue Aug 2 07:13:20 2011
@@ -530,7 +530,6 @@
*error = BadAlloc;
return NULL;
}
- pGlxDraw->refcnt++;
return pGlxDraw;
}
@@ -1101,10 +1100,8 @@
drawable->pDraw = pDraw;
drawable->type = type;
drawable->drawId = drawId;
- drawable->otherId = 0;
drawable->config = config;
drawable->eventMask = 0;
- drawable->refcnt = 0;
return GL_TRUE;
}
@@ -1134,18 +1131,14 @@
pGlxDraw->destroy (pGlxDraw);
return BadAlloc;
}
- pGlxDraw->refcnt++;
- if (drawableId != glxDrawableId) {
- /* Add the glx drawable under the XID of the underlying X drawable
- * too. That way we'll get a callback in DrawableGone and can
- * clean up properly when the drawable is destroyed. */
- if (!AddResource(drawableId, __glXDrawableRes, pGlxDraw)) {
- pGlxDraw->destroy (pGlxDraw);
- return BadAlloc;
- }
- pGlxDraw->refcnt++;
- pGlxDraw->otherId = drawableId;
+ /* Add the glx drawable under the XID of the underlying X drawable
+ * too. That way we'll get a callback in DrawableGone and can
+ * clean up properly when the drawable is destroyed. */
+ if (drawableId != glxDrawableId &&
+ !AddResource(pDraw->id, __glXDrawableRes, pGlxDraw)) {
+ pGlxDraw->destroy (pGlxDraw);
+ return BadAlloc;
}
return Success;
Index: xsrc/external/mit/xorg-server/dist/glx/glxdrawable.h
diff -u xsrc/external/mit/xorg-server/dist/glx/glxdrawable.h:1.2 xsrc/external/mit/xorg-server/dist/glx/glxdrawable.h:1.3
--- xsrc/external/mit/xorg-server/dist/glx/glxdrawable.h:1.2 Fri Mar 18 09:51:00 2011
+++ xsrc/external/mit/xorg-server/dist/glx/glxdrawable.h Tue Aug 2 07:13:20 2011
@@ -51,11 +51,8 @@
void (*waitX)(__GLXdrawable *);
void (*waitGL)(__GLXdrawable *);
- int refcnt; /* number of resources handles referencing this */
-
DrawablePtr pDraw;
XID drawId;
- XID otherId; /* for glx1.3 we need to track the original Drawable as well */
/*
** Either GLX_DRAWABLE_PIXMAP, GLX_DRAWABLE_WINDOW or
Index: xsrc/external/mit/xorg-server/dist/glx/glxext.c
diff -u xsrc/external/mit/xorg-server/dist/glx/glxext.c:1.2 xsrc/external/mit/xorg-server/dist/glx/glxext.c:1.3
--- xsrc/external/mit/xorg-server/dist/glx/glxext.c:1.2 Fri Mar 18 09:51:00 2011
+++ xsrc/external/mit/xorg-server/dist/glx/glxext.c Tue Aug 2 07:13:20 2011
@@ -130,18 +130,13 @@
* constructors, we added it as a glx drawable resource under both
* its glx drawable ID and it X drawable ID. Remove the other
* resource now so we don't a callback for freed memory. */
- if (glxPriv->otherId) {
- XID other = glxPriv->otherId;
- glxPriv->otherId = 0;
- if (xid == other)
- FreeResourceByType(glxPriv->drawId, __glXDrawableRes, TRUE);
- else
- FreeResourceByType(other, __glXDrawableRes, TRUE);
+ if (glxPriv->drawId != glxPriv->pDraw->id) {
+ if (xid == glxPriv->drawId)
+ FreeResourceByType(glxPriv->pDraw->id, __glXDrawableRes, TRUE);
+ else
+ FreeResourceByType(glxPriv->drawId, __glXDrawableRes, TRUE);
}
- if (--glxPriv->refcnt)
- return True;
-
for (c = glxAllContexts; c; c = next) {
next = c->next;
if (c->isCurrent && (c->drawPriv == glxPriv || c->readPriv == glxPriv)) {