Better handling of creation errors in display.

This commit is contained in:
Iskren Chernev 2011-03-11 14:58:06 +02:00 committed by Kristian Høgsberg
parent c9a729260f
commit fcd4caa0df
2 changed files with 7 additions and 1 deletions

View file

@ -373,6 +373,11 @@ wl_display_connect(const char *name)
} }
display->objects = wl_hash_table_create(); display->objects = wl_hash_table_create();
if (display->objects == NULL) {
close(display->fd);
free(display);
return NULL;
}
wl_list_init(&display->global_listener_list); wl_list_init(&display->global_listener_list);
display->proxy.object.interface = &wl_display_interface; display->proxy.object.interface = &wl_display_interface;
@ -397,6 +402,7 @@ WL_EXPORT void
wl_display_destroy(struct wl_display *display) wl_display_destroy(struct wl_display *display)
{ {
wl_connection_destroy(display->connection); wl_connection_destroy(display->connection);
wl_hash_table_destroy(display->objects);
close(display->fd); close(display->fd);
free(display); free(display);
} }

View file

@ -544,8 +544,8 @@ wl_display_create(void)
display->object.implementation = (void (**)(void)) &display_interface; display->object.implementation = (void (**)(void)) &display_interface;
wl_display_add_object(display, &display->object); wl_display_add_object(display, &display->object);
if (wl_display_add_global(display, &display->object, NULL)) { if (wl_display_add_global(display, &display->object, NULL)) {
wl_event_loop_destroy(display->loop);
wl_hash_table_destroy(display->objects); wl_hash_table_destroy(display->objects);
wl_event_loop_destroy(display->loop);
free(display); free(display);
return NULL; return NULL;
} }