glx: Get GLX_SCREEN first in __glXQueryContextInfo()
authorKristian Høgsberg <krh@bitplanet.net>
Fri, 7 May 2010 22:38:35 +0000 (18:38 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Fri, 7 May 2010 22:40:54 +0000 (18:40 -0400)
And lookup the GLX screen for the context.  Otherwise we'll end up
jumping through a NULL-pointer once we try to look up the visual
or config for the shared context.

https://bugs.freedesktop.org/show_bug.cgi?id=14245

src/glx/glxcmds.c

index 6063cf0c5d771b54c936a1b7908ce1893e91aaa2..34fbecf95634d75b8f786033d7cba3302a48f300 100644 (file)
@@ -1766,6 +1766,15 @@ static int __glXQueryContextInfo(Display * dpy, GLXContext ctx)
         unsigned i;
 
          _XRead(dpy, (char *) propList, nPropListBytes);
+
+        /* Look up screen first so we can look up visuals/fbconfigs later */
+         pProp = propList;
+         for (i = 0; i < numValues; i++, pProp += 2)
+            if (pProp[0] == GLX_SCREEN) {
+                ctx->screen = pProp[1];
+                ctx->psc = GetGLXScreenConfigs(dpy, ctx->screen);
+            }
+
          pProp = propList;
          for (i = 0; i < numValues; i++) {
             switch (*pProp++) {
@@ -1776,9 +1785,6 @@ static int __glXQueryContextInfo(Display * dpy, GLXContext ctx)
                ctx->mode =
                   _gl_context_modes_find_visual(ctx->psc->visuals, *pProp++);
                break;
-            case GLX_SCREEN:
-               ctx->screen = *pProp++;
-               break;
             case GLX_FBCONFIG_ID:
                ctx->mode =
                   _gl_context_modes_find_fbconfig(ctx->psc->configs,
@@ -1787,6 +1793,7 @@ static int __glXQueryContextInfo(Display * dpy, GLXContext ctx)
             case GLX_RENDER_TYPE:
                ctx->renderType = *pProp++;
                break;
+            case GLX_SCREEN:
             default:
                pProp++;
                continue;