sd_global = xbt_new(s_SD_global_t, 1);
- sd_global->workstations = xbt_dict_new();
- sd_global->workstation_count = 0;
sd_global->workstation_list = NULL;
- sd_global->links = xbt_dict_new();
- sd_global->link_count = 0;
sd_global->link_list = NULL;
sd_global->recyclable_route = NULL;
sd_global->watch_point_reached = 0;
#endif
XBT_DEBUG("ADD SD LEVELS");
- SD_HOST_LEVEL = xbt_lib_add_level(host_lib,free);
- SD_LINK_LEVEL = xbt_lib_add_level(link_lib,free);
+ SD_HOST_LEVEL = xbt_lib_add_level(host_lib,__SD_workstation_destroy);
+ SD_LINK_LEVEL = xbt_lib_add_level(link_lib,__SD_link_destroy);
}
/**
*/
void SD_create_environment(const char *platform_file)
{
- xbt_dict_cursor_t cursor = NULL;
+ xbt_lib_cursor_t cursor = NULL;
char *name = NULL;
- void *surf_workstation = NULL;
- void *surf_link = NULL;
+ void **surf_workstation = NULL;
+ void **surf_link = NULL;
platform_filename = bprintf("%s",platform_file);
surf_config_models_create_elms();
/* now let's create the SD wrappers for workstations and links */
- xbt_dict_foreach(surf_model_resource_set(surf_workstation_model), cursor,
- name, surf_workstation) {
- __SD_workstation_create(surf_workstation, NULL);
+ xbt_lib_foreach(host_lib, cursor, name, surf_workstation){
+ if(surf_workstation[SURF_WKS_LEVEL])
+ __SD_workstation_create(surf_workstation[SURF_WKS_LEVEL], NULL);
}
- xbt_dict_foreach(surf_model_resource_set(surf_network_model), cursor,
- name, surf_link) {
- __SD_link_create(surf_link, NULL);
+ xbt_lib_foreach(link_lib, cursor, name, surf_link) {
+ __SD_link_create(surf_link[SURF_LINK_LEVEL], NULL);
}
XBT_DEBUG("Workstation number: %d, link number: %d",
#ifdef HAVE_TRACING
TRACE_surf_release();
#endif
+
if (SD_INITIALISED()) {
XBT_DEBUG("Destroying workstation and link dictionaries...");
- xbt_dict_free(&sd_global->workstations);
- xbt_dict_free(&sd_global->links);
XBT_DEBUG("Destroying workstation and link arrays if necessary...");
if (sd_global->workstation_list != NULL)
xbt_swag_free(sd_global->done_task_set);
xbt_swag_free(sd_global->failed_task_set);
+ // Exit the LIB host_lib
+ xbt_lib_free(&host_lib);
+ xbt_lib_free(&link_lib);
+ xbt_lib_free(&as_router_lib);
+
xbt_free(sd_global);
sd_global = NULL;
XBT_DEBUG("Exiting Surf...");
surf_exit();
+
} else {
XBT_WARN("SD_exit() called, but SimDag is not running");
/* we cannot use exceptions here because xbt is not running! */