Module Name: xsrc Committed By: maya Date: Fri May 31 18:01:11 UTC 2019
Modified Files: xsrc/external/mit/xorg-server/dist/glx: glxcmds.c glxdrawable.h glxext.c Log Message: Undo local diff. It was introduced as one of the patches fixing https://bugs.freedesktop.org/show_bug.cgi?id=28181 This is marked fixed upstream, and was spotted on non-NetBSD, so it's very likely to be unnecessary. This diff was causing a double-free, causing Xorg to crash when closing pkgsrc/emulators/{retroarch,nestopia}. This is most likely a problem that became more evident from jemalloc debug which is filling free'd memory with 0x5a5a5a... Fixes PR xsrc/54246. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 xsrc/external/mit/xorg-server/dist/glx/glxcmds.c cvs rdiff -u -r1.6 -r1.7 xsrc/external/mit/xorg-server/dist/glx/glxdrawable.h cvs rdiff -u -r1.7 -r1.8 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.11 xsrc/external/mit/xorg-server/dist/glx/glxcmds.c:1.12 --- xsrc/external/mit/xorg-server/dist/glx/glxcmds.c:1.11 Mon Dec 31 09:49:59 2018 +++ xsrc/external/mit/xorg-server/dist/glx/glxcmds.c Fri May 31 18:01:11 2019 @@ -1137,7 +1137,6 @@ __glXDrawableInit(__GLXdrawable * drawab drawable->pDraw = pDraw; drawable->type = type; drawable->drawId = drawId; - drawable->otherId = 0; drawable->config = config; drawable->eventMask = 0; @@ -1172,10 +1171,8 @@ DoCreateGLXDrawable(ClientPtr client, __ * Windows aren't refcounted, so track both the X and the GLX window * so we get called regardless of destruction order. */ - // XXXMRG xorg-server 1.10 - if (drawableId != glxDrawableId && (type == GLX_DRAWABLE_WINDOW /*|| type == GLX_DRAWABLE_PIXMAP*/) && + if (drawableId != glxDrawableId && type == GLX_DRAWABLE_WINDOW && !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.6 xsrc/external/mit/xorg-server/dist/glx/glxdrawable.h:1.7 --- xsrc/external/mit/xorg-server/dist/glx/glxdrawable.h:1.6 Mon Dec 31 09:49:59 2018 +++ xsrc/external/mit/xorg-server/dist/glx/glxdrawable.h Fri May 31 18:01:11 2019 @@ -53,7 +53,6 @@ struct __GLXdrawable { 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.7 xsrc/external/mit/xorg-server/dist/glx/glxext.c:1.8 --- xsrc/external/mit/xorg-server/dist/glx/glxext.c:1.7 Mon Dec 31 09:49:59 2018 +++ xsrc/external/mit/xorg-server/dist/glx/glxext.c Fri May 31 18:01:11 2019 @@ -97,15 +97,13 @@ DrawableGone(__GLXdrawable * glxPriv, XI { __GLXcontext *c, *next; - if (glxPriv->type == GLX_DRAWABLE_WINDOW || glxPriv->type == GLX_DRAWABLE_PIXMAP) { + if (glxPriv->type == GLX_DRAWABLE_WINDOW) { /* If this was created by glXCreateWindow, free the matching resource */ - if (glxPriv->otherId) { - XID other = glxPriv->otherId; - glxPriv->otherId = 0; - if (xid == other) - FreeResourceByType(glxPriv->drawId, __glXDrawableRes, TRUE); + if (glxPriv->drawId != glxPriv->pDraw->id) { + if (xid == glxPriv->drawId) + FreeResourceByType(glxPriv->pDraw->id, __glXDrawableRes, TRUE); else - FreeResourceByType(other, __glXDrawableRes, TRUE); + FreeResourceByType(glxPriv->drawId, __glXDrawableRes, TRUE); } /* otherwise this window was implicitly created by MakeCurrent */ }