render: use dixDestroyPixmap() instead of direct driver call

Direct calls to ScreenRec->DestroyPixmap() blocks cleaning up the wrapping
jungle, so use the proper dix function instead.

See: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1754

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1711>
This commit is contained in:
Enrico Weigelt, metux IT consult 2024-09-30 17:57:05 +02:00
parent d2a93d0346
commit c8607ca66f
4 changed files with 6 additions and 6 deletions

View File

@ -608,7 +608,7 @@ miGlyphs(CARD8 op,
maskFormat, CPComponentAlpha, &component_alpha, maskFormat, CPComponentAlpha, &component_alpha,
serverClient, &error); serverClient, &error);
if (!pMask) { if (!pMask) {
(*pScreen->DestroyPixmap) (pMaskPixmap); dixDestroyPixmap(pMaskPixmap, 0);
return; return;
} }
pGC = GetScratchGC(pMaskPixmap->drawable.depth, pScreen); pGC = GetScratchGC(pMaskPixmap->drawable.depth, pScreen);
@ -676,7 +676,7 @@ miGlyphs(CARD8 op,
xSrc + x - xDst, xSrc + x - xDst,
ySrc + y - yDst, 0, 0, x, y, width, height); ySrc + y - yDst, 0, 0, x, y, width, height);
FreePicture((void *) pMask, (XID) 0); FreePicture((void *) pMask, (XID) 0);
(*pScreen->DestroyPixmap) (pMaskPixmap); dixDestroyPixmap(pMaskPixmap, 0);
} }
} }

View File

@ -67,7 +67,7 @@ miChangePictureClip(PicturePtr pPicture, int type, void *value, int n)
clientClip = BitmapToRegion(pScreen, (PixmapPtr) value); clientClip = BitmapToRegion(pScreen, (PixmapPtr) value);
if (!clientClip) if (!clientClip)
return BadAlloc; return BadAlloc;
(*pScreen->DestroyPixmap) ((PixmapPtr) value); dixDestroyPixmap((PixmapPtr) value, 0);
break; break;
case CT_REGION: case CT_REGION:
clientClip = value; clientClip = value;

View File

@ -1416,7 +1416,7 @@ FreePicture(void *value, XID pid)
} }
} }
else if (pPicture->pDrawable->type == DRAWABLE_PIXMAP) { else if (pPicture->pDrawable->type == DRAWABLE_PIXMAP) {
(*pScreen->DestroyPixmap) ((PixmapPtr) pPicture->pDrawable); dixDestroyPixmap((PixmapPtr) pPicture->pDrawable, 0);
} }
} }
dixFreeObjectWithPrivates(pPicture, PRIVATE_PICTURE); dixFreeObjectWithPrivates(pPicture, PRIVATE_PICTURE);

View File

@ -1137,7 +1137,7 @@ ProcRenderAddGlyphs(ClientPtr client)
/* The picture takes a reference to the pixmap, so we /* The picture takes a reference to the pixmap, so we
drop ours. */ drop ours. */
(pScreen->DestroyPixmap) (pDstPix); dixDestroyPixmap(pDstPix, 0);
pDstPix = NULL; pDstPix = NULL;
if (!pDst) { if (!pDst) {
@ -1542,7 +1542,7 @@ ProcRenderCreateCursor(ClientPtr client)
free(mskbits); free(mskbits);
return error; return error;
} }
(*pScreen->DestroyPixmap) (pPixmap); dixDestroyPixmap(pPixmap, 0);
CompositePicture(PictOpSrc, CompositePicture(PictOpSrc,
pSrc, 0, pPicture, 0, 0, 0, 0, 0, 0, width, height); pSrc, 0, pPicture, 0, 0, 0, 0, 0, 0, width, height);
(*pScreen->GetImage) (pPicture->pDrawable, (*pScreen->GetImage) (pPicture->pDrawable,