From: Martin Olsson Date: Sun, 8 Jul 2012 01:03:44 +0000 (+0200) Subject: compositor-x11: Add error handling in x11_compositor_create() X-Git-Tag: 0.95.0~80 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=11434bb2ea35783b89f929235e8803c9b9d44344;p=profile%2Fivi%2Fweston.git compositor-x11: Add error handling in x11_compositor_create() --- diff --git a/src/compositor-x11.c b/src/compositor-x11.c index 5afaa7a..f2f0cb1 100644 --- a/src/compositor-x11.c +++ b/src/compositor-x11.c @@ -1064,17 +1064,17 @@ x11_compositor_create(struct wl_display *display, if (weston_compositor_init(&c->base, display, argc, argv, config_file) < 0) - return NULL; + goto err_free; c->dpy = XOpenDisplay(NULL); if (c->dpy == NULL) - return NULL; + goto err_free; c->conn = XGetXCBConnection(c->dpy); XSetEventQueueOwner(c->dpy, XCBOwnsEventQueue); if (xcb_connection_has_error(c->conn)) - return NULL; + goto err_xdisplay; s = xcb_setup_roots_iterator(xcb_get_setup(c->conn)); c->screen = s.data; @@ -1084,20 +1084,20 @@ x11_compositor_create(struct wl_display *display, c->base.wl_display = display; if (x11_compositor_init_egl(c) < 0) - return NULL; + goto err_xdisplay; c->base.destroy = x11_destroy; if (weston_compositor_init_gl(&c->base) < 0) - return NULL; + goto err_egl; if (x11_input_create(c, no_input) < 0) - return NULL; + goto err_egl; for (i = 0, x = 0; i < count; i++) { if (x11_compositor_create_output(c, x, 0, width, height, fullscreen, no_input) < 0) - return NULL; + goto err_x11_input; x += width; } @@ -1109,6 +1109,16 @@ x11_compositor_create(struct wl_display *display, wl_event_source_check(c->xcb_source); return &c->base; + +err_x11_input: + x11_input_destroy(c); +err_egl: + x11_compositor_fini_egl(c); +err_xdisplay: + XCloseDisplay(c->dpy); +err_free: + free(c); + return NULL; } WL_EXPORT struct weston_compositor *