diff options
author | Enrico Weigelt, metux IT consult <info@metux.net> | 2024-10-01 16:06:16 +0200 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2025-02-06 22:58:36 +0000 |
commit | c610c037369500089baddd86aa3cf8046f3dc48b (patch) | |
tree | 0dda1d80d1889716ff59fb89a3563d5e58f7c7dc /src | |
parent | 888b33c67960ae6c1bf544e3fb3d439510ad9902 (diff) |
Direct calls to ScreenRec->DestroyPixmap() blocks cleaning up the wrapping
jungle, so use the proper dix function instead - except when calling down the
chain where we had wrapped ourselves - and protecting those against NULL, so
we can move subsys-provided functions out of that chain.
See: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1754
Part-of: <https://gitlab.freedesktop.org/xorg/driver/xf86-video-ati/-/merge_requests/28>
Diffstat (limited to 'src')
-rw-r--r-- | src/drmmode_display.c | 8 | ||||
-rw-r--r-- | src/radeon_dri2.c | 8 | ||||
-rw-r--r-- | src/radeon_exa_render.c | 10 | ||||
-rw-r--r-- | src/radeon_exa_shared.c | 2 | ||||
-rw-r--r-- | src/radeon_glamor.c | 7 | ||||
-rw-r--r-- | src/radeon_kms.c | 2 |
6 files changed, 18 insertions, 19 deletions
diff --git a/src/drmmode_display.c b/src/drmmode_display.c index a58f24dd..af598999 100644 --- a/src/drmmode_display.c +++ b/src/drmmode_display.c @@ -141,15 +141,13 @@ static PixmapPtr drmmode_create_bo_pixmap(ScrnInfoPtr pScrn, return pixmap; fail: - pScreen->DestroyPixmap(pixmap); + dixDestroyPixmap(pixmap, 0); return NULL; } static void drmmode_destroy_bo_pixmap(PixmapPtr pixmap) { - ScreenPtr pScreen = pixmap->drawable.pScreen; - - (*pScreen->DestroyPixmap)(pixmap); + dixDestroyPixmap(pixmap, 0); } static void @@ -442,7 +440,7 @@ destroy_pixmap_for_fbcon(ScrnInfoPtr pScrn) return; if (info->fbcon_pixmap) - pScrn->pScreen->DestroyPixmap(info->fbcon_pixmap); + dixDestroyPixmap(info->fbcon_pixmap, 0); info->fbcon_pixmap = NULL; } diff --git a/src/radeon_dri2.c b/src/radeon_dri2.c index fba56e5d..114cf22e 100644 --- a/src/radeon_dri2.c +++ b/src/radeon_dri2.c @@ -273,7 +273,7 @@ radeon_dri2_create_buffer2(ScreenPtr pScreen, error: free(buffers); - (*pScreen->DestroyPixmap)(pixmap); + dixDestroyPixmap(pixmap, 0); return NULL; } @@ -299,7 +299,7 @@ radeon_dri2_destroy_buffer2(ScreenPtr pScreen, if (private->refcnt == 0) { if (private->pixmap) - (*pScreen->DestroyPixmap)(private->pixmap); + dixDestroyPixmap(private->pixmap, 0); free(buffers->driverPrivate); free(buffers); @@ -649,10 +649,10 @@ update_front(DrawablePtr draw, DRI2BufferPtr front) if (!info->use_glamor) exaMoveInPixmap(pixmap); if (!radeon_get_flink_name(pRADEONEnt, pixmap, &front->name)) { - (*draw->pScreen->DestroyPixmap)(pixmap); + dixDestroyPixmap(pixmap, 0); return FALSE; } - (*draw->pScreen->DestroyPixmap)(priv->pixmap); + dixDestroyPixmap(priv->pixmap, 0); front->pitch = pixmap->devKind; front->cpp = pixmap->drawable.bitsPerPixel / 8; priv->pixmap = pixmap; diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c index a5f9612b..288e9dd1 100644 --- a/src/radeon_exa_render.c +++ b/src/radeon_exa_render.c @@ -615,7 +615,7 @@ static Bool R100PrepareComposite(int op, pMask = RADEONSolidPixmap(pScreen, cpu_to_le32(pMaskPicture->pSourcePict->solidFill.color)); if (!pMask) { if (!pSrcPicture->pDrawable) - pScreen->DestroyPixmap(pSrc); + dixDestroyPixmap(pSrc, 0); RADEON_FALLBACK(("Failed to create solid scratch pixmap\n")); } } @@ -977,7 +977,7 @@ static Bool R200PrepareComposite(int op, PicturePtr pSrcPicture, pMask = RADEONSolidPixmap(pScreen, cpu_to_le32(pMaskPicture->pSourcePict->solidFill.color)); if (!pMask) { if (!pSrcPicture->pDrawable) - pScreen->DestroyPixmap(pSrc); + dixDestroyPixmap(pSrc, 0); RADEON_FALLBACK(("Failed to create solid scratch pixmap\n")); } } @@ -1469,7 +1469,7 @@ static Bool R300PrepareComposite(int op, PicturePtr pSrcPicture, pMask = RADEONSolidPixmap(pScreen, cpu_to_le32(pMaskPicture->pSourcePict->solidFill.color)); if (!pMask) { if (!pSrcPicture->pDrawable) - pScreen->DestroyPixmap(pSrc); + dixDestroyPixmap(pSrc, 0); RADEON_FALLBACK(("Failed to create solid scratch pixmap\n")); } } @@ -2148,10 +2148,10 @@ static void RadeonDoneComposite(PixmapPtr pDst) RadeonFinishComposite(pDst); if (!accel_state->src_pic->pDrawable) - pScreen->DestroyPixmap(accel_state->src_pix); + dixDestroyPixmap(accel_state->src_pix, 0); if (accel_state->msk_pic && !accel_state->msk_pic->pDrawable) - pScreen->DestroyPixmap(accel_state->msk_pix); + dixDestroyPixmap(accel_state->msk_pix, 0); } #define VTX_OUT_MASK(_dstX, _dstY, _srcX, _srcY, _maskX, _maskY) \ diff --git a/src/radeon_exa_shared.c b/src/radeon_exa_shared.c index 94238a5a..1378876b 100644 --- a/src/radeon_exa_shared.c +++ b/src/radeon_exa_shared.c @@ -132,7 +132,7 @@ PixmapPtr RADEONSolidPixmap(ScreenPtr pScreen, uint32_t solid) bo = radeon_get_pixmap_bo(pPix)->bo.radeon; if (radeon_bo_map(bo, 1)) { - pScreen->DestroyPixmap(pPix); + dixDestroyPixmap(pPix, 0); return NULL; } diff --git a/src/radeon_glamor.c b/src/radeon_glamor.c index ccf99941..8ca413f7 100644 --- a/src/radeon_glamor.c +++ b/src/radeon_glamor.c @@ -199,7 +199,7 @@ static Bool radeon_glamor_destroy_pixmap(PixmapPtr pixmap) #ifndef HAVE_GLAMOR_EGL_DESTROY_TEXTURED_PIXMAP ScreenPtr screen = pixmap->drawable.pScreen; RADEONInfoPtr info = RADEONPTR(xf86ScreenToScrn(screen)); - Bool ret; + Bool ret = TRUE; #endif if (pixmap->refcnt == 1) { @@ -214,7 +214,8 @@ static Bool radeon_glamor_destroy_pixmap(PixmapPtr pixmap) return TRUE; #else screen->DestroyPixmap = info->glamor.SavedDestroyPixmap; - ret = screen->DestroyPixmap(pixmap); + if (screen->DestroyPixmap(pixmap)) + ret = screen->DestroyPixmap(pixmap); info->glamor.SavedDestroyPixmap = screen->DestroyPixmap; screen->DestroyPixmap = radeon_glamor_destroy_pixmap; @@ -359,7 +360,7 @@ radeon_glamor_set_pixmap_bo(DrawablePtr drawable, PixmapPtr pixmap) 0, 0, pixmap->devKind, NULL); old->devPrivate.ptr = NULL; - screen->DestroyPixmap(pixmap); + dixDestroyPixmap(pixmap, 0); return old; } diff --git a/src/radeon_kms.c b/src/radeon_kms.c index 51b00dd9..8b4d2dd8 100644 --- a/src/radeon_kms.c +++ b/src/radeon_kms.c @@ -209,7 +209,7 @@ static void RADEONFreeRec(ScrnInfoPtr pScrn) info = RADEONPTR(pScrn); if (info) { if (info->fbcon_pixmap) - pScrn->pScreen->DestroyPixmap(info->fbcon_pixmap); + dixDestroyPixmap(info->fbcon_pixmap, 0); if (info->accel_state) { free(info->accel_state); |