X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/b1ce579c3259c3539aaa37738c08092de6f51a17..f87ce6713676e7ecbb089353033372c3786f8e18:/main.cpp diff --git a/main.cpp b/main.cpp index b924349..ed8039e 100644 --- a/main.cpp +++ b/main.cpp @@ -1,7 +1,7 @@ #include +#include #include // strchr #include -#include #include #include #include @@ -39,7 +39,8 @@ namespace { EXIT_FAILURE_SIMU = 0x04, // simulation failed EXIT_FAILURE_CLEAN = 0x08, // error at cleanup EXIT_FAILURE_INTR = 0x10, // interrupted by user - EXIT_FAILURE_OTHER = 0x20, // other error + EXIT_FAILURE_LOAD = 0x20, // lost load on exit + EXIT_FAILURE_OTHER = 0x40, // other error }; // Cannot be globally initialized... @@ -107,32 +108,38 @@ static int simulation_main(int argc, char* argv[]) return result; } -static void check_for_lost_load() +static bool check_for_lost_load() { + bool res = true; double total_init = process::get_total_load_init(); double total_exit = process::get_total_load_exit(); double lost = total_init - total_exit; double lost_ratio = 100.0 * lost / total_init; - if (lost_ratio < -opt::load_ratio_threshold) + if (lost_ratio < -opt::load_ratio_threshold) { XBT_ERROR("Gained load at exit! %g (%g%%) <============", -lost, -lost_ratio); - else if (lost_ratio > opt::load_ratio_threshold) + res = false; + } else if (lost_ratio > opt::load_ratio_threshold) { XBT_ERROR("Lost load at exit! %g (%g%%) <============", lost, lost_ratio); - else + res = false; + } else XBT_VERB("Total load at exit looks good: %g (%g%%)", lost, lost_ratio); double total_running = process::get_total_load_running(); double running_ratio = 100.0 * total_running / total_init; - if (running_ratio < -opt::load_ratio_threshold) + if (running_ratio < -opt::load_ratio_threshold) { XBT_ERROR("Negative running load at exit! %g (%g%%) <============", total_running, running_ratio); - else if (running_ratio > opt::load_ratio_threshold) + res = false; + } else if (running_ratio > opt::load_ratio_threshold) { XBT_ERROR("Remaining running load at exit! %g (%g%%) <============", total_running, running_ratio); - else + res = false; + } else XBT_VERB("Running load at exit looks good: %g (%g%%)", total_running, running_ratio); + return res; } static void signal_handler(int /*sig*/) @@ -141,7 +148,7 @@ static void signal_handler(int /*sig*/) XBT_CRITICAL(">>>>>>>>>>" " caught CTRL-C: global exit requested " "<<<<<<<<<<"); - opt::exit_request = true; + opt::exit_request = 1; } else { XBT_CRITICAL(">>>>>>>>>>" " caught CTRL-C for the 2nd time: exit immediately " @@ -288,7 +295,8 @@ int main(int argc, char* argv[]) if (simulated_time >= 0.0) { simulation_time.stop(); elapsed_time.stop(); - check_for_lost_load(); + if (!check_for_lost_load()) + exit_status |= EXIT_FAILURE_LOAD; XBT_INFO(",----[ Results ]"); PR_STATS("Load", loads); PR_STATS("Computation", comps);