exa: 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:54:33 +02:00
parent 4694b8488e
commit 9ca03e6da0
3 changed files with 7 additions and 7 deletions

View File

@ -194,7 +194,7 @@ exaRealizeGlyphCaches(ScreenPtr pScreen, unsigned int format)
CPComponentAlpha, &component_alpha, serverClient, CPComponentAlpha, &component_alpha, serverClient,
&error); &error);
(*pScreen->DestroyPixmap) (pPixmap); /* picture holds a refcount */ dixDestroyPixmap(pPixmap, 0); /* picture holds a refcount */
if (!pPicture) if (!pPicture)
return FALSE; return FALSE;
@ -728,7 +728,7 @@ exaGlyphs(CARD8 op,
{ {
PictFormatPtr argbFormat; PictFormatPtr argbFormat;
(*pScreen->DestroyPixmap) (pMaskPixmap); dixDestroyPixmap(pMaskPixmap, 0);
if (!pMask) if (!pMask)
return; return;
@ -751,7 +751,7 @@ exaGlyphs(CARD8 op,
pMask = CreatePicture(0, &pMaskPixmap->drawable, maskFormat, 0, 0, pMask = CreatePicture(0, &pMaskPixmap->drawable, maskFormat, 0, 0,
serverClient, &error); serverClient, &error);
if (!pMask) { if (!pMask) {
(*pScreen->DestroyPixmap) (pMaskPixmap); dixDestroyPixmap(pMaskPixmap, 0);
return; return;
} }
} }
@ -832,6 +832,6 @@ exaGlyphs(CARD8 op,
xSrc + x - first_xOff, xSrc + x - first_xOff,
ySrc + y - first_yOff, 0, 0, x, y, width, height); ySrc + y - first_yOff, 0, 0, x, y, width, height);
FreePicture((void *) pMask, (XID) 0); FreePicture((void *) pMask, (XID) 0);
(*pScreen->DestroyPixmap) (pMaskPixmap); dixDestroyPixmap(pMaskPixmap, 0);
} }
} }

View File

@ -614,7 +614,7 @@ ExaOffscreenDefragment(ScreenPtr pScreen)
pDstPix->drawable.depth = 0; pDstPix->drawable.depth = 0;
pDstPix->drawable.bitsPerPixel = 0; pDstPix->drawable.bitsPerPixel = 0;
(*pScreen->DestroyPixmap) (pDstPix); dixDestroyPixmap(pDstPix, 0);
if (area->state == ExaOffscreenAvail && area->size > largest_size) if (area->state == ExaOffscreenAvail && area->size > largest_size)
return area; return area;

View File

@ -1082,7 +1082,7 @@ exaCreateAlphaPicture(ScreenPtr pScreen,
return 0; return 0;
pGC = GetScratchGC(pPixmap->drawable.depth, pScreen); pGC = GetScratchGC(pPixmap->drawable.depth, pScreen);
if (!pGC) { if (!pGC) {
(*pScreen->DestroyPixmap) (pPixmap); dixDestroyPixmap(pPixmap, 0);
return 0; return 0;
} }
ValidateGC(&pPixmap->drawable, pGC); ValidateGC(&pPixmap->drawable, pGC);
@ -1095,7 +1095,7 @@ exaCreateAlphaPicture(ScreenPtr pScreen,
FreeScratchGC(pGC); FreeScratchGC(pGC);
pPicture = CreatePicture(0, &pPixmap->drawable, pPictFormat, pPicture = CreatePicture(0, &pPixmap->drawable, pPictFormat,
0, 0, serverClient, &error); 0, 0, serverClient, &error);
(*pScreen->DestroyPixmap) (pPixmap); dixDestroyPixmap(pPixmap, 0);
return pPicture; return pPicture;
} }