X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/dc0b836b646303e8a540d20d9e86ecd4049bb372..1098e770381274687f9569b22b50dac4000e9ed4:/src/mc/mc_global.cpp diff --git a/src/mc/mc_global.cpp b/src/mc/mc_global.cpp index 0b430b53cf..6f985f1f9e 100644 --- a/src/mc/mc_global.cpp +++ b/src/mc/mc_global.cpp @@ -26,7 +26,7 @@ #include "src/simix/smx_process_private.h" -#ifdef HAVE_MC +#if HAVE_MC #include #include "src/mc/mc_comm_pattern.h" #include "src/mc/mc_request.h" @@ -40,14 +40,9 @@ #include "src/mc/mc_record.h" #include "src/mc/mc_protocol.h" -#include "src/mc/mc_client.h" +#include "src/mc/Client.hpp" -extern "C" { - -XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_global, mc, - "Logging specific to MC (global)"); - -} +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_global, mc, "Logging specific to MC (global)"); e_mc_mode_t mc_mode; @@ -59,19 +54,26 @@ std::vector processes_time; } } -#ifdef HAVE_MC +#if HAVE_MC int user_max_depth_reached = 0; /* MC global data structures */ mc_state_t mc_current_state = nullptr; -char mc_replay_mode = FALSE; +char mc_replay_mode = false; mc_stats_t mc_stats = nullptr; mc_global_t initial_global_state = nullptr; xbt_fifo_t mc_stack = nullptr; /* Liveness */ -xbt_automaton_t _mc_property_automaton = nullptr; + +namespace simgrid { +namespace mc { + +xbt_automaton_t property_automaton = nullptr; + +} +} /* Dot output */ FILE *dot_output = nullptr; @@ -110,7 +112,7 @@ void MC_init_dot_output() } -#ifdef HAVE_MC +#if HAVE_MC void MC_init() { simgrid::mc::processes_time.resize(simix_process_maxpid); @@ -137,7 +139,7 @@ void MC_run() { mc_mode = MC_MODE_CLIENT; MC_init(); - MC_client_main_loop(); + simgrid::mc::Client::get()->mainLoop(); } void MC_exit(void) @@ -147,15 +149,15 @@ void MC_exit(void) //xbt_abort(); } -#ifdef HAVE_MC +#if HAVE_MC int MC_deadlock_check() { if (mc_mode == MC_MODE_SERVER) { int res; - if ((res = mc_model_checker->process().send_message(MC_MESSAGE_DEADLOCK_CHECK))) + if ((res = mc_model_checker->process().getChannel().send(MC_MESSAGE_DEADLOCK_CHECK))) xbt_die("Could not check deadlock state"); s_mc_int_message_t message; - ssize_t s = mc_model_checker->process().receive_message(message); + ssize_t s = mc_model_checker->process().getChannel().receive(message); if (s == -1) xbt_die("Could not receive message"); if (s != sizeof(message) || message.type != MC_MESSAGE_DEADLOCK_CHECK_REPLY) @@ -168,13 +170,13 @@ int MC_deadlock_check() return message.value; } - int deadlock = FALSE; + bool deadlock = false; smx_process_t process; if (xbt_swag_size(simix_global->process_list)) { - deadlock = TRUE; + deadlock = true; xbt_swag_foreach(process, simix_global->process_list) if (simgrid::mc::process_is_enabled(process)) { - deadlock = FALSE; + deadlock = false; break; } } @@ -278,7 +280,7 @@ void MC_replay(xbt_fifo_t stack) void MC_replay_liveness(xbt_fifo_t stack) { xbt_fifo_item_t item; - mc_pair_t pair = nullptr; + simgrid::mc::Pair* pair = nullptr; mc_state_t state = nullptr; smx_simcall_t req = nullptr, saved_req = NULL; int value, depth = 1; @@ -289,7 +291,7 @@ void MC_replay_liveness(xbt_fifo_t stack) /* Intermediate backtracking */ if(_sg_mc_checkpoint > 0) { item = xbt_fifo_get_first_item(stack); - pair = (mc_pair_t) xbt_fifo_get_item_content(item); + pair = (simgrid::mc::Pair*) xbt_fifo_get_item_content(item); if(pair->graph_state->system_state){ simgrid::mc::restore_snapshot(pair->graph_state->system_state); return; @@ -304,7 +306,7 @@ void MC_replay_liveness(xbt_fifo_t stack) item != xbt_fifo_get_first_item(stack); item = xbt_fifo_get_prev_item(item)) { - pair = (mc_pair_t) xbt_fifo_get_item_content(item); + pair = (simgrid::mc::Pair*) xbt_fifo_get_item_content(item); state = (mc_state_t) pair->graph_state; @@ -402,18 +404,20 @@ void MC_show_non_termination(void){ MC_print_statistics(mc_stats); } +namespace simgrid { +namespace mc { -void MC_show_stack_liveness(xbt_fifo_t stack) +void show_stack_liveness(xbt_fifo_t stack) { int value; - mc_pair_t pair; + simgrid::mc::Pair* pair; xbt_fifo_item_t item; smx_simcall_t req; char *req_str = nullptr; for (item = xbt_fifo_get_last_item(stack); item; item = xbt_fifo_get_prev_item(item)) { - pair = (mc_pair_t) xbt_fifo_get_item_content(item); + pair = (simgrid::mc::Pair*) xbt_fifo_get_item_content(item); req = MC_state_get_executed_request(pair->graph_state, &value); if (req && req->call != SIMCALL_NONE) { req_str = simgrid::mc::request_to_string(req, value, simgrid::mc::RequestType::executed); @@ -423,12 +427,14 @@ void MC_show_stack_liveness(xbt_fifo_t stack) } } - -void MC_dump_stack_liveness(xbt_fifo_t stack) +void dump_stack_liveness(xbt_fifo_t stack) { - mc_pair_t pair; - while ((pair = (mc_pair_t) xbt_fifo_pop(stack)) != nullptr) - MC_pair_delete(pair); + simgrid::mc::Pair* pair; + while ((pair = (simgrid::mc::Pair*) xbt_fifo_pop(stack)) != nullptr) + delete pair; +} + +} } void MC_print_statistics(mc_stats_t stats) @@ -472,10 +478,10 @@ void MC_print_statistics(mc_stats_t stats) void MC_automaton_load(const char *file) { - if (_mc_property_automaton == nullptr) - _mc_property_automaton = xbt_automaton_new(); + if (simgrid::mc::property_automaton == nullptr) + simgrid::mc::property_automaton = xbt_automaton_new(); - xbt_automaton_load(_mc_property_automaton, file); + xbt_automaton_load(simgrid::mc::property_automaton, file); } // TODO, fix cross-process access (this function is not used) @@ -527,7 +533,7 @@ void MC_process_clock_add(smx_process_t process, double amount) simgrid::mc::processes_time[process->pid] += amount; } -#ifdef HAVE_MC +#if HAVE_MC void MC_report_assertion_error(void) { XBT_INFO("**************************");