diff options
author | Kristian Høgsberg <krh@bitplanet.net> | 2010-05-07 18:38:35 -0400 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2010-05-12 14:50:04 -0400 |
commit | 8b68c0aa24da7723c359e6a8a352f6e8fb584b5b (patch) | |
tree | c71dcf170e4f07f0e525306073d0415d2d48184c | |
parent | 3c407b52ff46d2adc8fd927ecb91b8bbd0066dcc (diff) |
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
-rw-r--r-- | 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 9e4e194d44..90fc59aa8c 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; |