glx: don't call pGlxDraw->destroy() if AddResource fails

AddResource will have called DrawableGone, which takes care of the
destruction.

Reviewed-by: Rémi Cardona <remi@gentoo.org>
Signed-off-by: Julien Cristau <jcristau@debian.org>
This commit is contained in:
Julien Cristau 2016-03-07 23:20:28 +01:00 committed by Adam Jackson
parent ac97fb2b80
commit 59b9c3d5e4

View File

@ -544,7 +544,6 @@ __glXGetDrawable(__GLXcontext * glxc, GLXDrawable drawId, ClientPtr client,
/* since we are creating the drawablePrivate, drawId should be new */
if (!AddResource(drawId, __glXDrawableRes, pGlxDraw)) {
pGlxDraw->destroy(pGlxDraw);
*error = BadAlloc;
return NULL;
}
@ -1239,20 +1238,16 @@ DoCreateGLXDrawable(ClientPtr client, __GLXscreen * pGlxScreen,
if (pGlxDraw == NULL)
return BadAlloc;
if (!AddResource(glxDrawableId, __glXDrawableRes, pGlxDraw)) {
pGlxDraw->destroy(pGlxDraw);
if (!AddResource(glxDrawableId, __glXDrawableRes, pGlxDraw))
return BadAlloc;
}
/*
* Windows aren't refcounted, so track both the X and the GLX window
* so we get called regardless of destruction order.
*/
if (drawableId != glxDrawableId && type == GLX_DRAWABLE_WINDOW &&
!AddResource(pDraw->id, __glXDrawableRes, pGlxDraw)) {
pGlxDraw->destroy(pGlxDraw);
!AddResource(pDraw->id, __glXDrawableRes, pGlxDraw))
return BadAlloc;
}
return Success;
}