X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/091dd5b6c0cca95b33f18645981aeaaf6585f1ad..0e7d247670cc012d8e784d0c8bcbb70a1c0bb9c6:/src/surf/maxmin.cpp diff --git a/src/surf/maxmin.cpp b/src/surf/maxmin.cpp index a09b2e5aac..e9fd4ee864 100644 --- a/src/surf/maxmin.cpp +++ b/src/surf/maxmin.cpp @@ -6,6 +6,7 @@ /* \file callbacks.h */ #include "maxmin_private.hpp" +#include "xbt/backtrace.hpp" #include "xbt/log.h" #include "xbt/mallocator.h" #include "xbt/sysdep.h" @@ -209,12 +210,9 @@ void lmm_system_free(lmm_system_t sys) return; while ((var = (lmm_variable_t) extract_variable(sys))) { - int status; - char* demangled = abi::__cxa_demangle(typeid(*var->id).name(), 0, 0, &status); - - XBT_WARN("Probable bug: a %s variable (#%d) not removed before the LMM system destruction.", demangled, + auto demangled = simgrid::xbt::demangle(typeid(*var->id).name()); + XBT_WARN("Probable bug: a %s variable (#%d) not removed before the LMM system destruction.", demangled.get(), var->id_int); - xbt_free(demangled); lmm_var_free(sys, var); } while ((cnst = (lmm_constraint_t) extract_constraint(sys))) @@ -867,29 +865,26 @@ void lmm_update_variable_bound(lmm_system_t sys, lmm_variable_t var, double boun lmm_update_modified_set(sys, var->cnsts[0].constraint); } -int lmm_concurrency_slack(lmm_constraint_t cnstr){ - //FIXME MARTIN: Replace by infinite value std::numeric_limits::(max)(), or something better within Simgrid? - if(cnstr->concurrency_limit<0) - return 666; - +int lmm_concurrency_slack(lmm_constraint_t cnstr) +{ + if (cnstr->concurrency_limit < 0) + return std::numeric_limits::max(); return cnstr->concurrency_limit - cnstr->concurrency_current; } /** \brief Measure the minimum concurrency slack across all constraints where the given var is involved */ -int lmm_cnstrs_min_concurrency_slack(lmm_variable_t var){ +int lmm_cnstrs_min_concurrency_slack(lmm_variable_t var) +{ int minslack = std::numeric_limits::max(); for (s_lmm_element_t const& elem : var->cnsts) { int slack = lmm_concurrency_slack(elem.constraint); - - //This is only an optimization, to avoid looking at more constraints when slack is already zero - //Disable it when debugging to let lmm_concurrency_slack catch nasty things - if (not slack && not XBT_LOG_ISENABLED(surf_maxmin, xbt_log_priority_debug)) - return 0; - - if(minslack>slack) - minslack=slack; + if (slack < minslack) { + // This is only an optimization, to avoid looking at more constraints when slack is already zero + if (slack == 0) + return 0; + minslack = slack; + } } - return minslack; } @@ -975,13 +970,11 @@ void lmm_on_disabled_var(lmm_system_t sys, lmm_constraint_t cnstr){ lmm_element_t nextelem = (lmm_element_t)xbt_swag_getNext(elem, cnstr->disabled_element_set.offset); - if (elem->variable->staged_weight>0 ){ + if (elem->variable->staged_weight > 0 && lmm_can_enable_var(elem->variable)) { //Found a staged variable //TODOLATER: Add random timing function to model reservation protocol fuzziness? Then how to make sure that //staged variables will eventually be called? - if(lmm_can_enable_var(elem->variable)){ - lmm_enable_var(sys,elem->variable); - } + lmm_enable_var(sys, elem->variable); } xbt_assert(cnstr->concurrency_current<=cnstr->concurrency_limit,"Concurrency overflow!");