[PATCH 09/17] Remove the host/server split for XV attributes.

Julien Cristau jcristau at debian.org
Sat Aug 31 08:03:32 PDT 2013


On Mon, Aug 26, 2013 at 13:26:15 -0700, Eric Anholt wrote:

> ---
>  hw/kdrive/ephyr/ephyrhostvideo.c | 107 -------------------------------
>  hw/kdrive/ephyr/ephyrhostvideo.h |  19 ------
>  hw/kdrive/ephyr/ephyrvideo.c     | 133 ++++++++++++++++++++++++---------------
>  3 files changed, 82 insertions(+), 177 deletions(-)
> 
[...]
> diff --git a/hw/kdrive/ephyr/ephyrvideo.c b/hw/kdrive/ephyr/ephyrvideo.c
> index be59886..62f697c 100644
> --- a/hw/kdrive/ephyr/ephyrvideo.c
> +++ b/hw/kdrive/ephyr/ephyrvideo.c
[...]
> @@ -650,18 +656,23 @@ ephyrXVPrivGetImageBufSize(int a_port_id,
>                             unsigned short a_width,
>                             unsigned short a_height, int *a_size)
>  {
> +    xcb_connection_t *conn = hostx_get_xcbconn();
> +    xcb_xv_query_image_attributes_cookie_t cookie;
> +    xcb_xv_query_image_attributes_reply_t *reply;
>      Bool is_ok = FALSE;
> -    unsigned short width = a_width, height = a_height;
>  
>      EPHYR_RETURN_VAL_IF_FAIL(a_size, FALSE);
>  
>      EPHYR_LOG("enter\n");
>  
> -    if (!ephyrHostXVQueryImageAttributes(a_port_id, a_image_id,
> -                                         &width, &height, a_size, NULL, NULL)) {
> -        EPHYR_LOG_ERROR("failed to get image attributes\n");
> +    cookie = xcb_xv_query_image_attributes(conn,
> +                                           a_port_id, a_image_id,
> +                                           a_width, a_height);
> +    reply = xcb_xv_query_image_attributes_reply(conn, cookie, NULL);
> +    if (!reply)
>          goto out;
> -    }
> +
> +    *a_size = reply->data_size;
>      is_ok = TRUE;
>  
>   out:

This seems to leak 'reply'.

[...]
> @@ -772,8 +781,12 @@ static int
>  ephyrGetPortAttribute(KdScreenInfo * a_screen_info,
>                        Atom a_attr_name, int *a_attr_value, pointer a_port_priv)
>  {
> +    xcb_connection_t *conn = hostx_get_xcbconn();
>      int res = Success, host_atom = 0;
>      EphyrPortPriv *port_priv = a_port_priv;
> +    xcb_generic_error_t *e;
> +    xcb_xv_get_port_attribute_cookie_t cookie;
> +    xcb_xv_get_port_attribute_reply_t *reply;
>  
>      EPHYR_RETURN_VAL_IF_FAIL(port_priv, BadMatch);
>      EPHYR_RETURN_VAL_IF_FAIL(ValidAtom(a_attr_name), BadMatch);
> @@ -788,12 +801,15 @@ ephyrGetPortAttribute(KdScreenInfo * a_screen_info,
>          goto out;
>      }
>  
> -    if (!ephyrHostXVGetPortAttribute(port_priv->port_number,
> -                                     host_atom, a_attr_value)) {
> -        EPHYR_LOG_ERROR("failed to get port attribute\n");
> +    cookie = xcb_xv_get_port_attribute(conn, port_priv->port_number, host_atom);
> +    reply = xcb_xv_get_port_attribute_reply(conn, cookie, &e);
> +    if (e) {
> +        EPHYR_LOG_ERROR ("XvGetPortAttribute() failed: %d \n", e->error_code);
> +        free(e);
>          res = BadMatch;
>          goto out;
>      }
> +    *a_attr_value = reply->value;
>  
>      res = Success;
>   out:

Missing free(reply) here too.

Cheers,
Julien


More information about the xorg-devel mailing list