diff options
author | Xiang, Haihao <[email protected]> | 2008-03-18 15:02:57 +0800 |
---|---|---|
committer | Xiang, Haihao <[email protected]> | 2008-03-18 15:02:57 +0800 |
commit | ae2c31ed669abab66a8c4b68d8d746e94b9ebf28 (patch) | |
tree | f0ae9ec54298c5a63053193a7e463d087de692b9 | |
parent | 5a0314b431ab147c6156c3011f4cb54161ba4b25 (diff) |
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.
-rw-r--r-- | src/glx/x11/glxclient.h | 5 | ||||
-rw-r--r-- | src/glx/x11/glxcmds.c | 2 | ||||
-rw-r--r-- | src/glx/x11/glxext.c | 4 |
3 files changed, 9 insertions, 2 deletions
diff --git a/src/glx/x11/glxclient.h b/src/glx/x11/glxclient.h index 730caf73024..ea90282b08f 100644 --- a/src/glx/x11/glxclient.h +++ b/src/glx/x11/glxclient.h @@ -310,6 +310,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". */ diff --git a/src/glx/x11/glxcmds.c b/src/glx/x11/glxcmds.c index adf53116745..8d0f07fd0a1 100644 --- a/src/glx/x11/glxcmds.c +++ b/src/glx/x11/glxcmds.c @@ -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 diff --git a/src/glx/x11/glxext.c b/src/glx/x11/glxext.c index 1d9be297414..525faab10e9 100644 --- a/src/glx/x11/glxext.c +++ b/src/glx/x11/glxext.c @@ -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 |