[PATCH xwayland v2] xwayland: check if creating xwl_output succeeded

Olivier Fourdan ofourdan at redhat.com
Mon Nov 30 06:09:39 PST 2015


> check return values of RR.*Create calls
> 
> v2. do not bail out if we don't have any output
> 
> Signed-off-by: Marek Chalupa <mchqwerty at gmail.com>
> ---
>  hw/xwayland/xwayland-output.c | 23 +++++++++++++++++++++++
>  hw/xwayland/xwayland.c        |  4 ++--
>  2 files changed, 25 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
> index 5ef444d..178105c 100644
> --- a/hw/xwayland/xwayland-output.c
> +++ b/hw/xwayland/xwayland-output.c
> @@ -248,6 +248,11 @@ xwl_output_create(struct xwl_screen *xwl_screen,
> uint32_t id)
>  
>      xwl_output->output = wl_registry_bind(xwl_screen->registry, id,
>                                            &wl_output_interface, 2);
> +    if (!xwl_output->output) {
> +        ErrorF("Failed binding wl_output\n");
> +        goto err;
> +    }
> +
>      xwl_output->server_output_id = id;
>      wl_output_add_listener(xwl_output->output, &output_listener,
>      xwl_output);
>  
> @@ -255,13 +260,31 @@ xwl_output_create(struct xwl_screen *xwl_screen,
> uint32_t id)
>  
>      xwl_output->xwl_screen = xwl_screen;
>      xwl_output->randr_crtc = RRCrtcCreate(xwl_screen->screen, xwl_output);
> +    if (!xwl_output->randr_crtc) {
> +        ErrorF("Failed creating RandR CRTC\n");
> +        goto err;
> +    }
> +
>      xwl_output->randr_output = RROutputCreate(xwl_screen->screen, name,
>                                                strlen(name), xwl_output);
> +    if (!xwl_output->randr_output) {
> +        ErrorF("Failed creating RandR Output\n");
> +        goto err;
> +    }
> +
>      RRCrtcGammaSetSize(xwl_output->randr_crtc, 256);
>      RROutputSetCrtcs(xwl_output->randr_output, &xwl_output->randr_crtc, 1);
>      RROutputSetConnection(xwl_output->randr_output, RR_Connected);
>  
>      return xwl_output;
> +
> +err:
> +    if (xwl_output->randr_crtc)
> +        RRCrtcDestroy(xwl_output->randr_crtc);
> +    if (xwl_output->output)
> +        wl_output_destroy(xwl_output->output);
> +    free(xwl_output);
> +    return NULL;
>  }
>  
>  void
> diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
> index 56b03f6..7480a3e 100644
> --- a/hw/xwayland/xwayland.c
> +++ b/hw/xwayland/xwayland.c
> @@ -397,8 +397,8 @@ registry_global(void *data, struct wl_registry *registry,
> uint32_t id,
>              wl_registry_bind(registry, id, &wl_shell_interface, 1);
>      }
>      else if (strcmp(interface, "wl_output") == 0 && version >= 2) {
> -        xwl_output_create(xwl_screen, id);
> -        xwl_screen->expecting_event++;
> +        if (xwl_output_create(xwl_screen, id))
> +            xwl_screen->expecting_event++;
>      }
>  #ifdef GLAMOR_HAS_GBM
>      else if (xwl_screen->glamor &&
> --
> 2.5.0
> 

Looks good to me.

Reviewed-by: Olivier Fourdan <ofourdan at redhat.com>


More information about the xorg-devel mailing list