From 0bfea9967265ac456b7d1f6b63ab117f872457ed Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Tue, 29 Apr 2025 16:47:10 +0200 Subject: [PATCH] xfree86: xvmc: use CloseScreen hook Wrapping ScreenRec's function pointers is problematic for many reasons, so use the new screen close notify hook instead. Signed-off-by: Enrico Weigelt, metux IT consult --- hw/xfree86/common/xf86xvmc.c | 21 +++++++++++---------- hw/xfree86/common/xf86xvpriv.h | 1 - 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/hw/xfree86/common/xf86xvmc.c b/hw/xfree86/common/xf86xvmc.c index c67418bf4..67f44cb0a 100644 --- a/hw/xfree86/common/xf86xvmc.c +++ b/hw/xfree86/common/xf86xvmc.c @@ -36,6 +36,9 @@ #include #include + +#include "dix/screen_hooks_priv.h" + #include "scrnintstr.h" #include "resource.h" #include "dixstruct.h" @@ -44,7 +47,6 @@ #include "xf86xvmc.h" typedef struct { - CloseScreenProcPtr CloseScreen; int num_adaptors; XF86MCAdaptorPtr *adaptors; XvMCAdaptorPtr dixinfo; @@ -129,17 +131,18 @@ xf86XvMCDestroySubpicture(XvMCSubpicturePtr pSubpicture) pSubpicture); } -static Bool -xf86XvMCCloseScreen(ScreenPtr pScreen) +static void xf86XvMCCloseScreen(CallbackListPtr *pcbl, + ScreenPtr pScreen, void *unused) { - xf86XvMCScreenPtr pScreenPriv = XF86XVMC_GET_PRIVATE(pScreen); + dixScreenUnhookClose(pScreen, xf86XvMCCloseScreen); - pScreen->CloseScreen = pScreenPriv->CloseScreen; + xf86XvMCScreenPtr pScreenPriv = XF86XVMC_GET_PRIVATE(pScreen); + if (!pScreenPriv) + return; free(pScreenPriv->dixinfo); free(pScreenPriv); - - return (*pScreen->CloseScreen) (pScreen); + dixSetPrivate(&pScreen->devPrivates, XF86XvMCScreenKey, NULL); } Bool @@ -169,9 +172,7 @@ xf86XvMCScreenInit(ScreenPtr pScreen, } dixSetPrivate(&pScreen->devPrivates, XF86XvMCScreenKey, pScreenPriv); - - pScreenPriv->CloseScreen = pScreen->CloseScreen; - pScreen->CloseScreen = xf86XvMCCloseScreen; + dixScreenHookClose(pScreen, xf86XvMCCloseScreen); pScreenPriv->num_adaptors = num_adaptors; pScreenPriv->adaptors = adaptors; diff --git a/hw/xfree86/common/xf86xvpriv.h b/hw/xfree86/common/xf86xvpriv.h index 5bea61fee..17c17056d 100644 --- a/hw/xfree86/common/xf86xvpriv.h +++ b/hw/xfree86/common/xf86xvpriv.h @@ -43,7 +43,6 @@ typedef struct { Bool (*EnterVT) (ScrnInfoPtr); void (*LeaveVT) (ScrnInfoPtr); xf86ModeSetProc *ModeSet; - CloseScreenProcPtr CloseScreen; } XF86XVScreenRec, *XF86XVScreenPtr; typedef struct {