check return values of RR.*Create calls v2. do not bail out if we don't have any output
Signed-off-by: Marek Chalupa <[email protected]> --- 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 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
