diff --git a/Xext/xvmc.c b/Xext/xvmc.c index 277da1d0e..3e946d148 100644 --- a/Xext/xvmc.c +++ b/Xext/xvmc.c @@ -46,7 +46,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; @@ -731,16 +730,12 @@ XvMCExtensionInit(void) extEntry->errorBase + XvMCBadSubpicture); } -static Bool -XvMCCloseScreen(ScreenPtr pScreen) +static void XvMCScreenClose(ScreenPtr pScreen, void *arg) { XvMCScreenPtr pScreenPriv = XVMC_GET_PRIVATE(pScreen); - - pScreen->CloseScreen = pScreenPriv->CloseScreen; - free(pScreenPriv); - - return (*pScreen->CloseScreen) (pScreen); + dixSetPrivate(&pScreen->devPrivates, XvMCScreenKey, NULL); + dixScreenUnhookClose(pScreen, XvMCScreenClose, NULL); } int @@ -756,8 +751,7 @@ XvMCScreenInit(ScreenPtr pScreen, int num, XvMCAdaptorPtr pAdapt) dixSetPrivate(&pScreen->devPrivates, XvMCScreenKey, pScreenPriv); - pScreenPriv->CloseScreen = pScreen->CloseScreen; - pScreen->CloseScreen = XvMCCloseScreen; + dixScreenHookClose(pScreen, XvMCScreenClose, NULL); pScreenPriv->num_adaptors = num; pScreenPriv->adaptors = pAdapt;