glx: Add isDirect back to __GLXcontextRec. It is needed
to check whether oldGC is used for direct rendering in function MakeContextCurrent. However it is possible oldGC->driContext is already freed. fix bug #14926.
This commit is contained in:
@@ -309,6 +309,11 @@ struct __GLXcontextRec {
|
||||
*/
|
||||
GLenum error;
|
||||
|
||||
/**
|
||||
* Whether this context does direct rendering.
|
||||
*/
|
||||
Bool isDirect;
|
||||
|
||||
/**
|
||||
* \c dpy of current display for this context. Will be \c NULL if not
|
||||
* current to any display, or if this is the "dummy context".
|
||||
|
||||
@@ -313,6 +313,7 @@ GLXContext AllocateGLXContext( Display *dpy )
|
||||
gc->fillImage = __glFillImage;
|
||||
gc->pc = gc->buf;
|
||||
gc->bufEnd = gc->buf + bufSize;
|
||||
gc->isDirect = GL_FALSE;
|
||||
if (__glXDebug) {
|
||||
/*
|
||||
** Set limit register so that there will be one command per packet
|
||||
@@ -404,6 +405,7 @@ CreateContext(Display *dpy, XVisualInfo *vis,
|
||||
gc->screen = mode->screen;
|
||||
gc->psc = psc;
|
||||
gc->mode = mode;
|
||||
gc->isDirect = GL_TRUE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1256,7 +1256,7 @@ static Bool MakeContextCurrent(Display *dpy, GLXDrawable draw,
|
||||
/* Send a glXMakeCurrent request to bind the new context. */
|
||||
bindReturnValue =
|
||||
SendMakeCurrentRequest(dpy, opcode, gc ? gc->xid : None,
|
||||
((dpy != oldGC->currentDpy) || oldGC->driContext)
|
||||
((dpy != oldGC->currentDpy) || oldGC->isDirect)
|
||||
? None : oldGC->currentContextTag,
|
||||
draw, read, &reply);
|
||||
}
|
||||
@@ -1267,7 +1267,7 @@ static Bool MakeContextCurrent(Display *dpy, GLXDrawable draw,
|
||||
}
|
||||
|
||||
if ((dpy != oldGC->currentDpy || (gc && gc->driContext)) &&
|
||||
!oldGC->driContext && oldGC != &dummyContext) {
|
||||
!oldGC->isDirect && oldGC != &dummyContext) {
|
||||
xGLXMakeCurrentReply dummy_reply;
|
||||
|
||||
/* We are either switching from one dpy to another and have to
|
||||
|
||||
Reference in New Issue
Block a user