X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7d4a9a7e27436e76b10c1b1f9ce794655dc070a2..2e9105988280d1e88b5b496d6e2eed4c8d541883:/src/surf/surf.c diff --git a/src/surf/surf.c b/src/surf/surf.c index 22aeea5247..410352937f 100644 --- a/src/surf/surf.c +++ b/src/surf/surf.c @@ -418,6 +418,11 @@ void surf_init(int *argc, char **argv) if (!history) history = tmgr_history_new(); +#ifdef HAVE_TRACING + TRACE_add_start_function(TRACE_surf_alloc); + TRACE_add_end_function(TRACE_surf_release); +#endif + sg_config_init(argc, argv); surf_action_init(); @@ -518,9 +523,11 @@ void surf_presolve(void) tmgr_history_get_next_event_leq(history, next_event_date, &value, (void **) &resource))) { - resource->model->model_private->update_resource_state(resource, - event, value, - NOW); + if (value >= 0){ + resource->model->model_private->update_resource_state(resource, + event, value, + NOW); + } } } xbt_dynar_foreach(model_list, iter, model) @@ -598,14 +605,14 @@ double surf_solve(double max_date) min = model_next_action_end; } - if (next_event_date == -1.0) { + if (next_event_date < 0.0) { XBT_DEBUG("no next TRACE event. Stop searching for it"); break; } - if ((min != -1.0) && (next_event_date > NOW + min)) break; + if ((min == -1.0) || (next_event_date > NOW + min)) break; - XBT_DEBUG("Updating models"); + XBT_DEBUG("Updating models (min = %g, NOW = %g, next_event_date = %g)",min, NOW, next_event_date); while ((event = tmgr_history_get_next_event_leq(history, next_event_date, &value, @@ -622,7 +629,7 @@ double surf_solve(double max_date) resource->model->name, min); resource->model->model_private->update_resource_state(resource, event, value, - NOW + min); + next_event_date); } } while (1); @@ -746,11 +753,18 @@ void surf_set_nthreads(int nthreads) { * sees it and react accordingly. This would kill that need for surf to call simix. * */ + +static void remove_watched_host(void *key) +{ + xbt_dict_remove(watched_hosts_lib, *(char**)key); +} + void surf_watched_hosts(void) { char *key; void *host; xbt_dict_cursor_t cursor; + xbt_dynar_t hosts = xbt_dynar_new(sizeof(char*), NULL); XBT_DEBUG("Check for host SURF_RESOURCE_ON on watched_hosts_lib"); xbt_dict_foreach(watched_hosts_lib,cursor,key,host) @@ -758,9 +772,11 @@ void surf_watched_hosts(void) if(SIMIX_host_get_state(host) == SURF_RESOURCE_ON){ XBT_INFO("Restart processes on host: %s",SIMIX_host_get_name(host)); SIMIX_host_autorestart(host); - xbt_dict_remove(watched_hosts_lib,key); + xbt_dynar_push_as(hosts, char*, key); } else XBT_DEBUG("See SURF_RESOURCE_OFF on host: %s",key); } + xbt_dynar_map(hosts, remove_watched_host); + xbt_dynar_free(&hosts); }