From a66f25a240462d15210e3d9a29a5309b7784231d Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Fri, 4 Oct 2024 21:10:26 +0200 Subject: [PATCH] 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 --- Xext/xvmc.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/Xext/xvmc.c b/Xext/xvmc.c index 282c304d5..1eed6a2c6 100644 --- a/Xext/xvmc.c +++ b/Xext/xvmc.c @@ -48,7 +48,6 @@ static RESTYPE XvMCRTSubpicture; typedef struct { int num_adaptors; XvMCAdaptorPtr adaptors; - CloseScreenProcPtr CloseScreen; char clientDriverName[DR_CLIENT_DRIVER_NAME_SIZE]; char busID[DR_BUSID_SIZE]; int major; @@ -733,16 +732,12 @@ XvMCExtensionInit(void) extEntry->errorBase + XvMCBadSubpicture); } -static Bool -XvMCCloseScreen(ScreenPtr pScreen) +static void XvMCScreenClose(CallbackListPtr *pcbl, ScreenPtr pScreen, void *unused) { XvMCScreenPtr pScreenPriv = XVMC_GET_PRIVATE(pScreen); - - pScreen->CloseScreen = pScreenPriv->CloseScreen; - free(pScreenPriv); - - return (*pScreen->CloseScreen) (pScreen); + dixSetPrivate(&pScreen->devPrivates, XvMCScreenKey, NULL); + dixScreenUnhookClose(pScreen, XvMCScreenClose); } int @@ -758,8 +753,7 @@ XvMCScreenInit(ScreenPtr pScreen, int num, XvMCAdaptorPtr pAdapt) dixSetPrivate(&pScreen->devPrivates, XvMCScreenKey, pScreenPriv); - pScreenPriv->CloseScreen = pScreen->CloseScreen; - pScreen->CloseScreen = XvMCCloseScreen; + dixScreenHookClose(pScreen, XvMCScreenClose); pScreenPriv->num_adaptors = num; pScreenPriv->adaptors = pAdapt;