From d77bb8e059ecfed9b714301fc31b093c6026c7bc Mon Sep 17 00:00:00 2001 From: Kristian Høgsberg Date: Fri, 23 Jul 2010 22:05:21 -0400 Subject: glx: Don't destroy context with XID 0 We use XID 0 to indicate the context has already been destroyed, but it's currently bound. --- src/glx/dri2_glx.c | 3 ++- src/glx/dri_glx.c | 3 ++- src/glx/drisw_glx.c | 3 ++- src/glx/glxcmds.c | 4 +++- 4 files changed, 9 insertions(+), 4 deletions(-) (limited to 'src/glx') diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c index 4a08f84de3..a94223b2a1 100644 --- a/src/glx/dri2_glx.c +++ b/src/glx/dri2_glx.c @@ -119,7 +119,8 @@ dri2_destroy_context(__GLXcontext *context) struct dri2_context *pcp = (struct dri2_context *) context; struct dri2_screen *psc = (struct dri2_screen *) context->psc; - glx_send_destroy_context(psc->base.dpy, context->xid); + if (context->xid) + glx_send_destroy_context(psc->base.dpy, context->xid); if (context->extensions) XFree((char *) context->extensions); diff --git a/src/glx/dri_glx.c b/src/glx/dri_glx.c index d0f680de63..eaf8e3b7f2 100644 --- a/src/glx/dri_glx.c +++ b/src/glx/dri_glx.c @@ -505,7 +505,8 @@ dri_destroy_context(__GLXcontext * context) struct dri_context *pcp = (struct dri_context *) context; struct dri_screen *psc = (struct dri_screen *) context->psc; - glx_send_destroy_context(psc->base.dpy, context->xid); + if (context->xid) + glx_send_destroy_context(psc->base.dpy, context->xid); if (context->extensions) XFree((char *) context->extensions); diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c index 852e56e484..11f88e9670 100644 --- a/src/glx/drisw_glx.c +++ b/src/glx/drisw_glx.c @@ -245,7 +245,8 @@ drisw_destroy_context(__GLXcontext *context) struct drisw_context *pcp = (struct drisw_context *) context; struct drisw_screen *psc = (struct drisw_screen *) context->psc; - glx_send_destroy_context(psc->base.dpy, context->xid); + if (context->xid) + glx_send_destroy_context(psc->base.dpy, context->xid); if (context->extensions) XFree((char *) context->extensions); diff --git a/src/glx/glxcmds.c b/src/glx/glxcmds.c index 1ded6247ef..b92638c9c2 100644 --- a/src/glx/glxcmds.c +++ b/src/glx/glxcmds.c @@ -584,7 +584,7 @@ glx_send_destroy_context(Display *dpy, XID xid) static void indirect_destroy_context(__GLXcontext *gc) { - if (!gc->imported) + if (!gc->imported && gc->xid) glx_send_destroy_context(gc->psc->dpy, gc->xid); __glXFreeVertexArrayState(gc); @@ -619,6 +619,8 @@ DestroyContext(Display * dpy, GLXContext gc) * Note that we set gc->xid = None above. In MakeContextCurrent() * we check for that and delete the context there. */ + if (!gc->imported) + glx_send_destroy_context(dpy, gc->xid); gc->xid = None; __glXUnlock(); return; -- cgit v1.2.3