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,
serverClient, &error);
if (!pMask) {
(*pScreen->DestroyPixmap) (pMaskPixmap);
dixDestroyPixmap(pMaskPixmap, 0);
return;
}
pGC = GetScratchGC(pMaskPixmap->drawable.depth, pScreen);
@ -676,7 +676,7 @@ miGlyphs(CARD8 op,
xSrc + x - xDst,
ySrc + y - yDst, 0, 0, x, y, width, height);
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);
if (!clientClip)
return BadAlloc;
(*pScreen->DestroyPixmap) ((PixmapPtr) value);
dixDestroyPixmap((PixmapPtr) value, 0);
break;
case CT_REGION:
clientClip = value;

View File

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

View File

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