composite: 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:52:40 +02:00
parent 5b541780c1
commit eb5476381a
2 changed files with 4 additions and 6 deletions

View File

@ -308,7 +308,7 @@ compFreeClientWindow(WindowPtr pWin, XID id)
if (pPixmap) { if (pPixmap) {
compRestoreWindow(pWin, pPixmap); compRestoreWindow(pWin, pPixmap);
(*pScreen->DestroyPixmap) (pPixmap); dixDestroyPixmap(pPixmap, 0);
} }
} }

View File

@ -180,7 +180,7 @@ compCheckRedirect(WindowPtr pWin)
compSetParentPixmap(pWin); compSetParentPixmap(pWin);
compRestoreWindow(pWin, pPixmap); compRestoreWindow(pWin, pPixmap);
(*pScreen->DestroyPixmap) (pPixmap); dixDestroyPixmap(pPixmap, 0);
} }
} }
else if (should) { else if (should) {
@ -378,13 +378,11 @@ compImplicitRedirect(WindowPtr pWin, WindowPtr pParent)
static void static void
compFreeOldPixmap(WindowPtr pWin) compFreeOldPixmap(WindowPtr pWin)
{ {
ScreenPtr pScreen = pWin->drawable.pScreen;
if (pWin->redirectDraw != RedirectDrawNone) { if (pWin->redirectDraw != RedirectDrawNone) {
CompWindowPtr cw = GetCompWindow(pWin); CompWindowPtr cw = GetCompWindow(pWin);
if (cw->pOldPixmap) { if (cw->pOldPixmap) {
(*pScreen->DestroyPixmap) (cw->pOldPixmap); dixDestroyPixmap(cw->pOldPixmap, 0);
cw->pOldPixmap = NullPixmap; cw->pOldPixmap = NullPixmap;
} }
} }
@ -617,7 +615,7 @@ compDestroyWindow(WindowPtr pWin)
PixmapPtr pPixmap = (*pScreen->GetWindowPixmap) (pWin); PixmapPtr pPixmap = (*pScreen->GetWindowPixmap) (pWin);
compSetParentPixmap(pWin); compSetParentPixmap(pWin);
(*pScreen->DestroyPixmap) (pPixmap); dixDestroyPixmap(pPixmap, 0);
} }
ret = (*pScreen->DestroyWindow) (pWin); ret = (*pScreen->DestroyWindow) (pWin);
cs->DestroyWindow = pScreen->DestroyWindow; cs->DestroyWindow = pScreen->DestroyWindow;