xlib: do not cache return value of glXChooseVisual/glXGetVisualFromFBConfig

The returned XVisualInfo from glXChooseVisual/glXGetVisualFromFBConfig
is being cached in XMesaVisual.vishandle (and unconditionally
overwritten on subsequent calls).  However, these entry points are
specified to return XVisualInfo instances to be owned by the caller and
freed with XFree(), so the return values should not be retained.

With this change, XMesaVisual.vishandle is essentially unused and will
be removed in a subsequent change.

v2: update commit message

Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
This commit is contained in:
John Sheu 2016-04-13 13:57:42 -07:00 committed by Alejandro Piñeiro
parent eeff133158
commit fe9d8cd79e

View file

@ -1241,16 +1241,11 @@ Fake_glXChooseVisual( Display *dpy, int screen, int *list )
xmvis = choose_visual(dpy, screen, list, GL_FALSE);
if (xmvis) {
#if 0
return xmvis->vishandle;
#else
/* create a new vishandle - the cached one may be stale */
xmvis->vishandle = malloc(sizeof(XVisualInfo));
if (xmvis->vishandle) {
memcpy(xmvis->vishandle, xmvis->visinfo, sizeof(XVisualInfo));
XVisualInfo* visinfo = malloc(sizeof(XVisualInfo));
if (visinfo) {
memcpy(visinfo, xmvis->visinfo, sizeof(XVisualInfo));
}
return xmvis->vishandle;
#endif
return visinfo;
}
else
return NULL;
@ -1974,16 +1969,11 @@ Fake_glXGetVisualFromFBConfig( Display *dpy, GLXFBConfig config )
{
if (dpy && config) {
XMesaVisual xmvis = (XMesaVisual) config;
#if 0
return xmvis->vishandle;
#else
/* create a new vishandle - the cached one may be stale */
xmvis->vishandle = malloc(sizeof(XVisualInfo));
if (xmvis->vishandle) {
memcpy(xmvis->vishandle, xmvis->visinfo, sizeof(XVisualInfo));
XVisualInfo* visinfo = malloc(sizeof(XVisualInfo));
if (visinfo) {
memcpy(visinfo, xmvis->visinfo, sizeof(XVisualInfo));
}
return xmvis->vishandle;
#endif
return visinfo;
}
else {
return NULL;