diff --git a/wayland/wayland-client.c b/wayland/wayland-client.c index ad35c30a..0be1c479 100644 --- a/wayland/wayland-client.c +++ b/wayland/wayland-client.c @@ -373,6 +373,11 @@ wl_display_connect(const char *name) } display->objects = wl_hash_table_create(); + if (display->objects == NULL) { + close(display->fd); + free(display); + return NULL; + } wl_list_init(&display->global_listener_list); display->proxy.object.interface = &wl_display_interface; @@ -397,6 +402,7 @@ WL_EXPORT void wl_display_destroy(struct wl_display *display) { wl_connection_destroy(display->connection); + wl_hash_table_destroy(display->objects); close(display->fd); free(display); } diff --git a/wayland/wayland-server.c b/wayland/wayland-server.c index 17b91ae0..99b9f336 100644 --- a/wayland/wayland-server.c +++ b/wayland/wayland-server.c @@ -544,8 +544,8 @@ wl_display_create(void) display->object.implementation = (void (**)(void)) &display_interface; wl_display_add_object(display, &display->object); if (wl_display_add_global(display, &display->object, NULL)) { - wl_event_loop_destroy(display->loop); wl_hash_table_destroy(display->objects); + wl_event_loop_destroy(display->loop); free(display); return NULL; }