[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