[PATCH 03/16] xv: Move common code for adaptor cleanup to xvmain.c

walter harms wharms at bfs.de
Sun Jul 20 10:12:37 PDT 2014



Am 18.07.2014 19:32, schrieb Eric Anholt:
> 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.
> 
> Signed-off-by: Eric Anholt <eric at anholt.net>
> ---
>  Xext/xvdix.h               |  1 +
>  Xext/xvmain.c              | 41 +++++++++++++++++++++++++++++++++++++++++
>  hw/kdrive/src/kxv.c        | 28 +---------------------------
>  hw/xfree86/common/xf86xv.c | 31 +------------------------------
>  4 files changed, 44 insertions(+), 57 deletions(-)
> 
> diff --git a/Xext/xvdix.h b/Xext/xvdix.h
> index bb08cf4..f62adf8 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 00b5179..70edc93 100644
> --- a/Xext/xvmain.c
> +++ b/Xext/xvmain.c
> @@ -1091,3 +1091,44 @@ 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;
> +
> +    if (pAdaptor->pPorts) {
> +        free(pAdaptor->pPorts);
> +        pAdaptor->pPorts = NULL;
> +    }


        free(pAdaptor->pPorts);
        pAdaptor->pPorts = NULL;

should be sufficient

re,
 wh


> +    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 3d63304..5aae8f7 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 6302b8d..ae20b58 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


More information about the xorg-devel mailing list