From 39fc99a92bbf91f031cd9785a496754aba8fea4d Mon Sep 17 00:00:00 2001 From: Taekyun Kim Date: Mon, 24 Aug 2015 15:49:02 +0900 Subject: [PATCH] pepper: Error handling and some cleanups in compositor.c Change-Id: Iebd7e07ef4a579f2617a4cdcc8ee7dc4ed9ab7ec --- src/lib/pepper/compositor.c | 42 +++++++++++++++++++++++++++++----------- src/lib/pepper/pepper-internal.h | 1 + 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/lib/pepper/compositor.c b/src/lib/pepper/compositor.c index 201f3a8..5cfe036 100644 --- a/src/lib/pepper/compositor.c +++ b/src/lib/pepper/compositor.c @@ -63,24 +63,24 @@ pepper_compositor_create(const char *socket_name) sizeof(pepper_compositor_t)); if (!compositor) - return NULL; + { + PEPPER_ERROR("pepper_object_alloc() failed.\n"); + goto error; + } compositor->display = wl_display_create(); - if (!compositor->display) { - PEPPER_ERROR("Failed to create wayland display object.\n"); + PEPPER_ERROR("wl_display_create() failed.\n"); goto error; } if (wl_display_add_socket(compositor->display, socket_name) != 0) { - PEPPER_ERROR("Failed to add socket display = %p socket_name = %s\n", - compositor->display, socket_name); + PEPPER_ERROR("wl_display_add_socket(%p, %s) failed.\n", compositor->display, socket_name); goto error; } - wl_global_create(compositor->display, &wl_compositor_interface, 3, compositor, compositor_bind); wl_list_init(&compositor->surfaces); wl_list_init(&compositor->seat_list); pepper_list_init(&compositor->output_list); @@ -89,13 +89,21 @@ pepper_compositor_create(const char *socket_name) if (wl_display_init_shm(compositor->display) != 0) { - PEPPER_ERROR("Failed to initialze shm.\n"); + PEPPER_ERROR("wl_display_init_shm() failed.\n"); + goto error; + } + + compositor->global = wl_global_create(compositor->display, &wl_compositor_interface, + 3, compositor, compositor_bind); + if (!compositor->global) + { + PEPPER_ERROR("wl_global_create() failed.\n"); goto error; } if (!pepper_data_device_manager_init(compositor->display)) { - PEPPER_ERROR("Failed to initialze data device manager.\n"); + PEPPER_ERROR("pepper_data_device_manager_init() failed.\n"); goto error; } @@ -103,7 +111,18 @@ pepper_compositor_create(const char *socket_name) error: if (compositor) - pepper_compositor_destroy(compositor); + { + /* TODO: Data device manager fini. */ + + if (compositor->global) + wl_global_destroy(compositor->global); + + if (compositor->display) + wl_display_destroy(compositor->display); + + pepper_object_fini(&compositor->base); + pepper_free(compositor); + } return NULL; } @@ -111,9 +130,10 @@ error: PEPPER_API void pepper_compositor_destroy(pepper_compositor_t *compositor) { - if (compositor->display) - wl_display_destroy(compositor->display); + /* TODO: Data device manager fini. */ + wl_global_destroy(compositor->global); + wl_display_destroy(compositor->display); pepper_object_fini(&compositor->base); pepper_free(compositor); } diff --git a/src/lib/pepper/pepper-internal.h b/src/lib/pepper/pepper-internal.h index 10a96ed..475de7d 100644 --- a/src/lib/pepper/pepper-internal.h +++ b/src/lib/pepper/pepper-internal.h @@ -52,6 +52,7 @@ struct pepper_compositor pepper_object_t base; char *socket_name; struct wl_display *display; + struct wl_global *global; struct wl_list surfaces; struct wl_list regions; -- 2.7.4