From cb42805c6675bbb9f0b37609fe2ffecc07f46290 Mon Sep 17 00:00:00 2001 From: Eric Anholt <eric@anholt.net> Date: Fri, 27 Dec 2013 21:54:26 -0800 Subject: [PATCH] xv: Move common code for adaptor cleanup to xvmain.c Since any DDX XV screen cleanup would need this same code for freeing the tree of pointers for xv adaptors, move it to the dix. v2: Unconditionalize the pPorts freeing, to match the block above it. Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Keith Packard <keithp@keithp.com> (v1) --- Xext/xvdix.h | 1 + Xext/xvmain.c | 39 ++++++++++++++++++++++++++++++++++++++ hw/kdrive/src/kxv.c | 28 +-------------------------- hw/xfree86/common/xf86xv.c | 31 +----------------------------- 4 files changed, 42 insertions(+), 57 deletions(-) diff --git a/Xext/xvdix.h b/Xext/xvdix.h index bb08cf4c75..f62adf8835 100644 --- a/Xext/xvdix.h +++ b/Xext/xvdix.h @@ -235,6 +235,7 @@ extern _X_EXPORT int SProcXvDispatch(ClientPtr); extern _X_EXPORT int XvScreenInit(ScreenPtr); extern _X_EXPORT DevPrivateKey XvGetScreenKey(void); extern _X_EXPORT unsigned long XvGetRTPort(void); +extern _X_EXPORT void XvFreeAdaptor(XvAdaptorPtr pAdaptor); extern _X_EXPORT int XvdiSendPortNotify(XvPortPtr, Atom, INT32); extern _X_EXPORT int XvdiVideoStopped(XvPortPtr, int); diff --git a/Xext/xvmain.c b/Xext/xvmain.c index 00b5179bd3..9084e40f36 100644 --- a/Xext/xvmain.c +++ b/Xext/xvmain.c @@ -1091,3 +1091,42 @@ WriteSwappedPortNotifyEvent(xvEvent * from, xvEvent * to) cpswapl(from->u.portNotify.value, to->u.portNotify.value); } + +void +XvFreeAdaptor(XvAdaptorPtr pAdaptor) +{ + int i; + + free(pAdaptor->name); + pAdaptor->name = NULL; + + if (pAdaptor->pEncodings) { + XvEncodingPtr pEncode = pAdaptor->pEncodings; + + for (i = 0; i < pAdaptor->nEncodings; i++, pEncode++) + free(pEncode->name); + free(pAdaptor->pEncodings); + pAdaptor->pEncodings = NULL; + } + + free(pAdaptor->pFormats); + pAdaptor->pFormats = NULL; + + free(pAdaptor->pPorts); + pAdaptor->pPorts = NULL; + + if (pAdaptor->pAttributes) { + XvAttributePtr pAttribute = pAdaptor->pAttributes; + + for (i = 0; i < pAdaptor->nAttributes; i++, pAttribute++) + free(pAttribute->name); + free(pAdaptor->pAttributes); + pAdaptor->pAttributes = NULL; + } + + free(pAdaptor->pImages); + pAdaptor->pImages = NULL; + + free(pAdaptor->devPriv.ptr); + pAdaptor->devPriv.ptr = NULL; +} diff --git a/hw/kdrive/src/kxv.c b/hw/kdrive/src/kxv.c index 3d633044e3..5aae8f7543 100644 --- a/hw/kdrive/src/kxv.c +++ b/hw/kdrive/src/kxv.c @@ -193,19 +193,6 @@ KdXVFreeAdaptor(XvAdaptorPtr pAdaptor) { int i; - free(pAdaptor->name); - - if (pAdaptor->pEncodings) { - XvEncodingPtr pEncode = pAdaptor->pEncodings; - - for (i = 0; i < pAdaptor->nEncodings; i++, pEncode++) { - free(pEncode->name); - } - free(pAdaptor->pEncodings); - } - - free(pAdaptor->pFormats); - if (pAdaptor->pPorts) { XvPortPtr pPort = pAdaptor->pPorts; XvPortRecPrivatePtr pPriv; @@ -220,22 +207,9 @@ KdXVFreeAdaptor(XvAdaptorPtr pAdaptor) free(pPriv); } } - free(pAdaptor->pPorts); } - if (pAdaptor->nAttributes) { - XvAttributePtr pAttribute = pAdaptor->pAttributes; - - for (i = 0; i < pAdaptor->nAttributes; i++, pAttribute++) { - free(pAttribute->name); - } - - free(pAdaptor->pAttributes); - } - - free(pAdaptor->pImages); - - free(pAdaptor->devPriv.ptr); + XvFreeAdaptor(pAdaptor); } static Bool diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c index 6302b8d104..ae20b58a4f 100644 --- a/hw/xfree86/common/xf86xv.c +++ b/hw/xfree86/common/xf86xv.c @@ -297,21 +297,6 @@ xf86XVFreeAdaptor(XvAdaptorPtr pAdaptor) { int i; - free(pAdaptor->name); - pAdaptor->name = NULL; - - if (pAdaptor->pEncodings) { - XvEncodingPtr pEncode = pAdaptor->pEncodings; - - for (i = 0; i < pAdaptor->nEncodings; i++, pEncode++) - free(pEncode->name); - free(pAdaptor->pEncodings); - pAdaptor->pEncodings = NULL; - } - - free(pAdaptor->pFormats); - pAdaptor->pFormats = NULL; - if (pAdaptor->pPorts) { XvPortPtr pPort = pAdaptor->pPorts; XvPortRecPrivatePtr pPriv; @@ -328,23 +313,9 @@ xf86XVFreeAdaptor(XvAdaptorPtr pAdaptor) free(pPriv); } } - free(pAdaptor->pPorts); - pAdaptor->pPorts = NULL; - } - - if (pAdaptor->pAttributes) { - XvAttributePtr pAttribute = pAdaptor->pAttributes; - - for (i = 0; i < pAdaptor->nAttributes; i++, pAttribute++) - free(pAttribute->name); - free(pAdaptor->pAttributes); - pAdaptor->pAttributes = NULL; } - free(pAdaptor->pImages); - free(pAdaptor->devPriv.ptr); - pAdaptor->pImages = NULL; - pAdaptor->devPriv.ptr = NULL; + XvFreeAdaptor(pAdaptor); } static Bool -- GitLab