diff options
Diffstat (limited to 'glx/glxext.c')
-rw-r--r-- | glx/glxext.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/glx/glxext.c b/glx/glxext.c index 93391e9fd..bdacf8865 100644 --- a/glx/glxext.c +++ b/glx/glxext.c @@ -36,6 +36,7 @@ #include "glxserver.h" #include <windowstr.h> #include <propertyst.h> +#include <registry.h> #include "privates.h" #include <os.h> #include "g_disptab.h" @@ -126,6 +127,10 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid) __GLXcontext *c; for (c = glxAllContexts; c; c = c->next) { + if (c->isCurrent && (c->drawPriv == glxPriv || c->readPriv == glxPriv)) { + (*c->loseCurrent)(c); + __glXFlushContextCache(); + } if (c->drawPriv == glxPriv) c->drawPriv = NULL; if (c->readPriv == glxPriv) @@ -313,6 +318,10 @@ void GlxExtensionInit(void) __glXDrawableRes = CreateNewResourceType((DeleteType)DrawableGone); __glXSwapBarrierRes = CreateNewResourceType((DeleteType)SwapBarrierGone); + RegisterResourceName(__glXContextRes, "GLXContext"); + RegisterResourceName(__glXDrawableRes, "GLXDrawable"); + RegisterResourceName(__glXSwapBarrierRes, "GLXSwapBarrier"); + if (!dixRequestPrivate(glxClientPrivateKey, sizeof (__GLXclientState))) return; if (!AddCallback (&ClientStateCallback, glxClientCallback, 0)) |