Mesa (master): glx: Get GLX_SCREEN first in __glXQueryContextInfo()

Kristian Høgsberg krh at kemper.freedesktop.org
Fri May 7 22:42:23 UTC 2010


Module: Mesa
Branch: master
Commit: db178af09d734f2f973d50de9ff90fe1cbb5e9c9
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=db178af09d734f2f973d50de9ff90fe1cbb5e9c9

Author: Kristian Høgsberg <krh at bitplanet.net>
Date:   Fri May  7 18:38:35 2010 -0400

glx: Get GLX_SCREEN first in __glXQueryContextInfo()

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 |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/glx/glxcmds.c b/src/glx/glxcmds.c
index 6063cf0..34fbecf 100644
--- a/src/glx/glxcmds.c
+++ b/src/glx/glxcmds.c
@@ -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;




More information about the mesa-commit mailing list