diff --git a/glx/glxcmds.c b/glx/glxcmds.c index ab2d91b..08b866d 100644 --- a/glx/glxcmds.c +++ b/glx/glxcmds.c @@ -1222,7 +1222,7 @@ static int DoDestroyDrawable(__GLXclientState *cl, XID glxdrawable, int type) } } - FreeResource(glxdrawable, FALSE); + __glXUnrefDrawable(pGlxDraw); return Success; } diff --git a/glx/glxdri.c b/glx/glxdri.c index 223b06e..253d868 100644 --- a/glx/glxdri.c +++ b/glx/glxdri.c @@ -237,8 +237,6 @@ __glXDRIdrawableDestroy(__GLXdrawable *drawable) serverClient, drawable->pDraw); __glXleaveServer(GL_FALSE); } - - xfree(private); } static GLboolean diff --git a/glx/glxdri2.c b/glx/glxdri2.c index 4e76c71..4fdc7df 100644 --- a/glx/glxdri2.c +++ b/glx/glxdri2.c @@ -91,7 +91,7 @@ struct __GLXDRIdrawable { int width; int height; __DRIbuffer buffers[5]; - int count; + int countn; }; static void @@ -106,8 +106,6 @@ __glXDRIdrawableDestroy(__GLXdrawable *drawable) * aready have taken care of this, so only call if pDraw isn't NULL. */ if (drawable->pDraw != NULL) DRI2DestroyDrawable(drawable->pDraw); - - xfree(private); } static void diff --git a/glx/glxext.c b/glx/glxext.c index c882372..0b6c752 100644 --- a/glx/glxext.c +++ b/glx/glxext.c @@ -120,6 +120,8 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid) { ScreenPtr pScreen = glxPriv->pDraw->pScreen; + glxPriv->destroy(glxPriv); + switch (glxPriv->type) { case GLX_DRAWABLE_PIXMAP: case GLX_DRAWABLE_PBUFFER: @@ -129,7 +131,7 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid) glxPriv->pDraw = NULL; glxPriv->drawId = 0; - __glXUnrefDrawable(glxPriv); + xfree(glxPriv); return True; } diff --git a/glx/glxutil.c b/glx/glxutil.c index bc71087..61323f5 100644 --- a/glx/glxutil.c +++ b/glx/glxutil.c @@ -52,11 +52,9 @@ void __glXUnrefDrawable(__GLXdrawable *glxPriv) { glxPriv->refCount--; - if (glxPriv->refCount == 0) { + if (glxPriv->refCount == 0) /* remove the drawable from the drawable list */ FreeResourceByType(glxPriv->drawId, __glXDrawableRes, FALSE); - glxPriv->destroy(glxPriv); - } } GLboolean