X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/33aec8491c4c337352f570c24f8a76298e3a319c..89a8ddc975b0e3ecd348d5a9a9b9d3de8b579b2b:/src/mc/simgrid_mc.cpp?ds=sidebyside diff --git a/src/mc/simgrid_mc.cpp b/src/mc/simgrid_mc.cpp index e153b0c9a2..9f85d7a164 100644 --- a/src/mc/simgrid_mc.cpp +++ b/src/mc/simgrid_mc.cpp @@ -24,14 +24,13 @@ #include "src/mc/mc_protocol.h" #include "src/mc/mc_safety.h" #include "src/mc/mc_comm_pattern.h" -#include "src/mc/mc_liveness.h" #include "src/mc/mc_exit.h" #include "src/mc/Session.hpp" #include "src/mc/Checker.hpp" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_main, mc, "Entry point for simgrid-mc"); -static +static inline char** argvdup(int argc, char** argv) { char** argv_copy = xbt_new(char*, argc+1); @@ -43,22 +42,15 @@ char** argvdup(int argc, char** argv) static std::unique_ptr createChecker(simgrid::mc::Session& session) { - using simgrid::mc::Session; - using simgrid::mc::FunctionalChecker; - - std::function code; if (_sg_mc_comms_determinism || _sg_mc_send_determinism) - code = [](Session& session) { - return MC_modelcheck_comm_determinism(); }; + return std::unique_ptr( + simgrid::mc::createCommunicationDeterminismChecker(session)); else if (!_sg_mc_property_file || _sg_mc_property_file[0] == '\0') - code = [](Session& session) { - return simgrid::mc::modelcheck_safety(); }; + return std::unique_ptr( + simgrid::mc::createSafetyChecker(session)); else - code = [](Session& session) { - return simgrid::mc::modelcheck_liveness(); }; - - return std::unique_ptr( - new FunctionalChecker(session, std::move(code))); + return std::unique_ptr( + simgrid::mc::createLivenessChecker(session)); } int main(int argc, char** argv) @@ -74,17 +66,20 @@ int main(int argc, char** argv) mc_mode = MC_MODE_SERVER; // The initialisation function can touch argv. - // We need to keep the original parameters in order to pass them to the - // model-checked process so we make a copy of them: - int argc_copy = argc; + // We make a copy of argv before modifying it in order to pass the original + // value to the model-checked: char** argv_copy = argvdup(argc, argv); - xbt_log_init(&argc_copy, argv_copy); - sg_config_init(&argc_copy, argv_copy); + xbt_log_init(&argc, argv); + sg_config_init(&argc, argv); std::unique_ptr session = - std::unique_ptr(Session::spawnvp(argv[1], argv+1)); + std::unique_ptr(Session::spawnvp(argv_copy[1], argv_copy+1)); + free(argv_copy); + + simgrid::mc::session = session.get(); std::unique_ptr checker = createChecker(*session); int res = checker->run(); + checker = nullptr; session->close(); return res; }