X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4b5f366a8a5e31aefbd2f2d211ddfe951624df68..4bb0e691487e7925e4921da271e083b64fde57cf:/src/mc/simgrid_mc.cpp diff --git a/src/mc/simgrid_mc.cpp b/src/mc/simgrid_mc.cpp index 0f3447709f..f06240ef84 100644 --- a/src/mc/simgrid_mc.cpp +++ b/src/mc/simgrid_mc.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include @@ -28,7 +29,9 @@ #include "mc_private.h" #include "mc_protocol.h" #include "mc_server.h" -#include "mc_model_checker.h" +#include "mc_safety.h" +#include "mc_comm_pattern.h" +#include "mc_liveness.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_main, mc, "Entry point for simgrid-mc"); @@ -37,6 +40,10 @@ static const bool trace = true; static int do_child(int socket, char** argv) { XBT_DEBUG("Inside the child process PID=%i", (int) getpid()); + if (prctl(PR_SET_PDEATHSIG, SIGHUP) != 0) { + std::perror("simgrid-mc"); + return MC_SERVER_ERROR; + } int res; // Remove CLOEXEC in order to pass the socket to the exec-ed program: @@ -75,8 +82,13 @@ static int do_parent(int socket, pid_t child) mc_mode = MC_MODE_SERVER; mc_server = new s_mc_server(child, socket); mc_server->start(); - mc_server->resume(&mc_model_checker->process); - mc_server->loop(); + MC_init_model_checker(child, socket); + if (_sg_mc_comms_determinism || _sg_mc_send_determinism) + MC_modelcheck_comm_determinism(); + else if (!_sg_mc_property_file || _sg_mc_property_file[0] == '\0') + MC_modelcheck_safety(); + else + MC_modelcheck_liveness(); mc_server->shutdown(); mc_server->exit(); } @@ -106,7 +118,7 @@ int main(int argc, char** argv) if (argc < 2) xbt_die("Missing arguments.\n"); - bool server_mode = false; + bool server_mode = true; char* env = std::getenv("SIMGRID_MC_MODE"); if (env) { if (std::strcmp(env, "server") == 0) @@ -114,7 +126,7 @@ int main(int argc, char** argv) else if (std::strcmp(env, "standalone") == 0) server_mode = false; else - XBT_WARN("Unrecognised value for SIMGRID_MC_MODE (server/standalone)"); + xbt_die("Unrecognised value for SIMGRID_MC_MODE (server/standalone)"); } if (!server_mode) {