Variable __glXActiveScreens is defined and used but _NOT_INITIALIZED_ANYWHERE_. So on some code paths on first use of this variable Xdmx segfaults.
Signed-off-by: Raimonds Cicans <[email protected]> --- hw/dmx/glxProxy/glxcmds.c | 13 ++++++------- hw/dmx/glxProxy/glxcmdsswap.c | 14 +++++++------- hw/dmx/glxProxy/glxcontext.h | 1 - hw/dmx/glxProxy/glxdrawable.h | 2 -- hw/dmx/glxProxy/glxscreens.c | 1 - hw/dmx/glxProxy/glxscreens.h | 12 ------------ hw/dmx/glxProxy/glxserver.h | 1 - hw/dmx/glxProxy/glxvisuals.c | 26 +++++++++----------------- 8 files changed, 22 insertions(+), 48 deletions(-) diff --git a/hw/dmx/glxProxy/glxcmds.c b/hw/dmx/glxProxy/glxcmds.c index 1c56a88cb..54d4b2fd4 100644 --- a/hw/dmx/glxProxy/glxcmds.c +++ b/hw/dmx/glxProxy/glxcmds.c @@ -1785,7 +1785,7 @@ CreateGLXPixmap(__GLXclientState * cl, ScreenPtr pScreen; VisualPtr pVisual; __GLXpixmap *pGlxPixmap; - __GLXscreenInfo *pGlxScreen; + DMXScreenInfo *dmxScreenGlx; __GLXvisualConfig *pGlxVisual; __GLXFBConfig *pFBConfig; int i, s, rc; @@ -1849,14 +1849,14 @@ CreateGLXPixmap(__GLXclientState * cl, /* ** Get configuration of the visual. */ - pGlxScreen = &__glXActiveScreens[screenNum]; - pGlxVisual = pGlxScreen->pGlxVisual; - for (i = 0; i < pGlxScreen->numVisuals; i++, pGlxVisual++) { + dmxScreenGlx = &dmxScreens[screenNum]; + pGlxVisual = dmxScreenGlx->glxVisuals; + for (i = 0; i < dmxScreenGlx->numGlxVisuals; i++, pGlxVisual++) { if (pGlxVisual->vid == visual) { break; } } - if (i == pGlxScreen->numVisuals) { + if (i == dmxScreenGlx->numGlxVisuals) { /* ** Visual not support on this screen by this OpenGL implementation. */ @@ -1880,7 +1880,7 @@ CreateGLXPixmap(__GLXclientState * cl, else { pVisual = NULL; pGlxVisual = NULL; - pGlxScreen = &__glXActiveScreens[pDraw->pScreen->myNum]; + dmxScreenGlx = &dmxScreens[pDraw->pScreen->myNum]; } pGlxPixmap = (__GLXpixmap *) malloc(sizeof(__GLXpixmap)); @@ -1894,7 +1894,6 @@ CreateGLXPixmap(__GLXclientState * cl, } pGlxPixmap->pDraw = pDraw; - pGlxPixmap->pGlxScreen = pGlxScreen; pGlxPixmap->pGlxVisual = pGlxVisual; pGlxPixmap->pFBConfig = pFBConfig; pGlxPixmap->pScreen = pScreen; diff --git a/hw/dmx/glxProxy/glxcmdsswap.c b/hw/dmx/glxProxy/glxcmdsswap.c index 92ca512a7..ba090a533 100644 --- a/hw/dmx/glxProxy/glxcmdsswap.c +++ b/hw/dmx/glxProxy/glxcmdsswap.c @@ -272,7 +272,7 @@ __glXSwapGetVisualConfigs(__GLXclientState * cl, GLbyte * pc) ClientPtr client = cl->client; xGLXGetVisualConfigsReq *req = (xGLXGetVisualConfigsReq *) pc; xGLXGetVisualConfigsReply reply; - __GLXscreenInfo *pGlxScreen; + DMXScreenInfo *dmxScreenGlx; __GLXvisualConfig *pGlxVisual; CARD32 buf[__GLX_TOTAL_CONFIG]; unsigned int screen; @@ -288,14 +288,14 @@ __glXSwapGetVisualConfigs(__GLXclientState * cl, GLbyte * pc) client->errorValue = screen; return BadValue; } - pGlxScreen = &__glXActiveScreens[screen]; + dmxScreenGlx = &dmxScreens[screen]; reply = (xGLXGetVisualConfigsReply) { .type = X_Reply, .sequenceNumber = client->sequence, - .length = (pGlxScreen->numGLXVisuals * __GLX_SIZE_CARD32 * + .length = (dmxScreenGlx->numGlxVisuals * __GLX_SIZE_CARD32 * __GLX_TOTAL_CONFIG) >> 2, - .numVisuals = pGlxScreen->numGLXVisuals, + .numVisuals = dmxScreenGlx->numGlxVisuals, .numProps = __GLX_TOTAL_CONFIG }; @@ -305,9 +305,9 @@ __glXSwapGetVisualConfigs(__GLXclientState * cl, GLbyte * pc) __GLX_SWAP_INT(&reply.numProps); WriteToClient(client, sz_xGLXGetVisualConfigsReply, &reply); - for (i = 0; i < pGlxScreen->numVisuals; i++) { - pGlxVisual = &pGlxScreen->pGlxVisual[i]; - if (!pGlxScreen->isGLXvis[i] || pGlxVisual->vid == 0) { + for (i = 0; i < dmxScreenGlx->numGlxVisuals; i++) { + pGlxVisual = &dmxScreenGlx->glxVisuals[i]; + if (pGlxVisual->vid == 0) { /* not a usable visual */ continue; } diff --git a/hw/dmx/glxProxy/glxcontext.h b/hw/dmx/glxProxy/glxcontext.h index ac8c0573d..a662bbc12 100644 --- a/hw/dmx/glxProxy/glxcontext.h +++ b/hw/dmx/glxProxy/glxcontext.h @@ -47,7 +47,6 @@ struct __GLXcontextRec { ** when the context is created. */ ScreenPtr pScreen; - __GLXscreenInfo *pGlxScreen; /* ** This context is created with respect to this visual. diff --git a/hw/dmx/glxProxy/glxdrawable.h b/hw/dmx/glxProxy/glxdrawable.h index 0340896e5..6c1560724 100644 --- a/hw/dmx/glxProxy/glxdrawable.h +++ b/hw/dmx/glxProxy/glxdrawable.h @@ -35,7 +35,6 @@ typedef struct { DrawablePtr pDraw; __GLXvisualConfig *pGlxVisual; - __GLXscreenInfo *pGlxScreen; __GLXFBConfig *pFBConfig; ScreenPtr pScreen; Bool idExists; @@ -54,7 +53,6 @@ typedef struct { } __glXWindow; typedef struct { - __GLXscreenInfo *pGlxScreen; __GLXFBConfig *pFBConfig; ScreenPtr pScreen; Bool idExists; diff --git a/hw/dmx/glxProxy/glxscreens.c b/hw/dmx/glxProxy/glxscreens.c index 508e67ed4..ad0e76f7a 100644 --- a/hw/dmx/glxProxy/glxscreens.c +++ b/hw/dmx/glxProxy/glxscreens.c @@ -45,7 +45,6 @@ #include "panoramiXsrv.h" #endif -__GLXscreenInfo *__glXActiveScreens; GLint __glXNumActiveScreens; __GLXFBConfig **__glXFBConfigs; diff --git a/hw/dmx/glxProxy/glxscreens.h b/hw/dmx/glxProxy/glxscreens.h index bb7477bc7..a0f8ccaa2 100644 --- a/hw/dmx/glxProxy/glxscreens.h +++ b/hw/dmx/glxProxy/glxscreens.h @@ -33,18 +33,6 @@ #include "GL/internal/glcore.h" -typedef struct { - - __GLXvisualConfig *pGlxVisual; - GLint numVisuals; - GLint numGLXVisuals; - GLint *isGLXvis; - - char *GLXvendor; - char *GLXextensions; - -} __GLXscreenInfo; - extern void __glXScreenInit(GLint); extern void __glXScreenReset(void); diff --git a/hw/dmx/glxProxy/glxserver.h b/hw/dmx/glxProxy/glxserver.h index 7aa5ad2f2..f03389a32 100644 --- a/hw/dmx/glxProxy/glxserver.h +++ b/hw/dmx/glxProxy/glxserver.h @@ -73,7 +73,6 @@ typedef struct __GLXcontextRec *GLXContext; */ typedef struct __GLXclientStateRec __GLXclientState; -extern __GLXscreenInfo *__glXActiveScreens; extern GLint __glXNumActiveScreens; /************************************************************************/ diff --git a/hw/dmx/glxProxy/glxvisuals.c b/hw/dmx/glxProxy/glxvisuals.c index 3fca04f0d..58b0e984a 100644 --- a/hw/dmx/glxProxy/glxvisuals.c +++ b/hw/dmx/glxProxy/glxvisuals.c @@ -100,24 +100,20 @@ VisualID glxMatchVisualInConfigList(ScreenPtr pScreen, VisualPtr pVisual, __GLXvisualConfig * configs, int nconfigs) { - __GLXscreenInfo *pGlxScreen; + DMXScreenInfo *dmxScreenGlx; __GLXvisualConfig *pGlxVisual; int i; - /* check that the glx extension has been initialized */ - if (!__glXActiveScreens) - return 0; - - pGlxScreen = &__glXActiveScreens[pScreen->myNum]; - pGlxVisual = pGlxScreen->pGlxVisual; + dmxScreenGlx = &dmxScreens[pScreen->myNum]; + pGlxVisual = dmxScreenGlx->glxVisuals; /* find the glx visual info for pVisual */ - for (i = 0; i < pGlxScreen->numVisuals; i++, pGlxVisual++) { + for (i = 0; i < dmxScreenGlx->numGlxVisuals; i++, pGlxVisual++) { if (pGlxVisual->vid == pVisual->vid) { break; } } - if (i == pGlxScreen->numVisuals) { + if (i == dmxScreenGlx->numGlxVisuals) { /* * the visual is not supported by glx */ @@ -130,19 +126,15 @@ glxMatchVisualInConfigList(ScreenPtr pScreen, VisualPtr pVisual, VisualPtr glxMatchVisual(ScreenPtr pScreen, VisualPtr pVisual, ScreenPtr pMatchScreen) { - __GLXscreenInfo *pGlxScreen2; + DMXScreenInfo *dmxScreenGlx2; int j; VisualID vid; - /* check that the glx extension has been initialized */ - if (!__glXActiveScreens) - return NULL; - - pGlxScreen2 = &__glXActiveScreens[pMatchScreen->myNum]; + dmxScreenGlx2 = &dmxScreens[pMatchScreen->myNum]; vid = glxMatchVisualInConfigList(pScreen, pVisual, - pGlxScreen2->pGlxVisual, - pGlxScreen2->numVisuals); + dmxScreenGlx2->glxVisuals, + dmxScreenGlx2->numGlxVisuals); if (vid) { /* * find the X visual of the matching glx visual -- 2.13.6 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel
