X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6063afbddf453571e145b5236294c8631d9eecb2..dd33438d4578b82a960cade03329ca99f2bbc53a:/src/surf/surf_interface.cpp diff --git a/src/surf/surf_interface.cpp b/src/surf/surf_interface.cpp index be75f0a219..6c00e7caca 100644 --- a/src/surf/surf_interface.cpp +++ b/src/surf/surf_interface.cpp @@ -32,6 +32,7 @@ simgrid::trace_mgr::future_evt_set *future_evt_set = nullptr; std::vector surf_path; std::vector host_that_restart; xbt_dict_t watched_hosts_lib; +extern std::map storage_types; namespace simgrid { namespace surf { @@ -135,6 +136,7 @@ std::ifstream* surf_ifsopen(const char* name) if (__surf_is_absolute_file_path(name)) { /* don't mess with absolute file names */ fs->open(name, std::ifstream::in); } + /* search relative files in the path */ for (auto path_elm : surf_path) { std::string buff = path_elm + FILE_DELIM + name; @@ -351,8 +353,6 @@ void surf_init(int *argc, char **argv) USER_HOST_LEVEL = simgrid::s4u::Host::extension_create(nullptr); storage_lib = xbt_lib_new(); - storage_type_lib = xbt_lib_new(); - file_lib = xbt_lib_new(); watched_hosts_lib = xbt_dict_new_homogeneous(nullptr); XBT_DEBUG("Add SURF levels"); @@ -364,8 +364,8 @@ void surf_init(int *argc, char **argv) if (!future_evt_set) future_evt_set = new simgrid::trace_mgr::future_evt_set(); - TRACE_add_start_function(TRACE_surf_alloc); - TRACE_add_end_function(TRACE_surf_release); + TRACE_surf_alloc(); + simgrid::surf::surfExitCallbacks.connect(TRACE_surf_release); sg_config_init(argc, argv); @@ -380,9 +380,17 @@ void surf_exit() sg_host_exit(); xbt_lib_free(&storage_lib); sg_link_exit(); - xbt_lib_free(&storage_type_lib); - xbt_lib_free(&file_lib); xbt_dict_free(&watched_hosts_lib); + for (auto e : storage_types) { + storage_type_t stype = e.second; + free(stype->model); + free(stype->type_id); + free(stype->content); + free(stype->content_type); + xbt_dict_free(&(stype->properties)); + delete stype->model_properties; + free(stype); + } for (auto model : *all_existing_models) delete model; @@ -454,7 +462,7 @@ double Model::nextOccuringEventLazy(double now) while(!modifiedSet_->empty()) { Action *action = &(modifiedSet_->front()); modifiedSet_->pop_front(); - int max_dur_flag = 0; + bool max_dur_flag = false; if (action->getStateSet() != runningActionSet_) continue; @@ -478,11 +486,11 @@ double Model::nextOccuringEventLazy(double now) min = now + time_to_completion; // when the task will complete if nothing changes } - if ((action->getMaxDuration() != NO_MAX_DURATION) && + if ((action->getMaxDuration() > NO_MAX_DURATION) && (min == -1 || action->getStartTime() + action->getMaxDuration() < min)) { // when the task will complete anyway because of the deadline if any min = action->getStartTime() + action->getMaxDuration(); - max_dur_flag = 1; + max_dur_flag = true; } @@ -494,9 +502,9 @@ double Model::nextOccuringEventLazy(double now) if (min != -1) { action->heapUpdate(actionHeap_, min, max_dur_flag ? MAX_DURATION : NORMAL); - XBT_DEBUG("Insert at heap action(%p) min %f now %f", action, min, - now); - } else DIE_IMPOSSIBLE; + XBT_DEBUG("Insert at heap action(%p) min %f now %f", action, min, now); + } else + DIE_IMPOSSIBLE; } //hereafter must have already the min value for this resource model @@ -704,7 +712,7 @@ void Action::setBound(double bound) if (variable_) lmm_update_variable_bound(getModel()->getMaxminSystem(), variable_, bound); - if (getModel()->getUpdateMechanism() == UM_LAZY && getLastUpdate()!=surf_get_clock()) + if (getModel()->getUpdateMechanism() == UM_LAZY && getLastUpdate() != surf_get_clock()) heapRemove(getModel()->getActionHeap()); XBT_OUT(); } @@ -717,7 +725,7 @@ double Action::getStartTime() double Action::getFinishTime() { /* keep the function behavior, some models (cpu_ti) change the finish time before the action end */ - return remains_ == 0 ? finishTime_ : -1; + return remains_ <= 0 ? finishTime_ : -1; } void Action::setData(void* data)