X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1b98995f4b33aa88c1ae66e20fe3669c2b2dfabf..e87e7a6959f53286092e5c160dd865579601ba0e:/src/mc/Session.cpp diff --git a/src/mc/Session.cpp b/src/mc/Session.cpp index a5721e3e46..8079ed7f96 100644 --- a/src/mc/Session.cpp +++ b/src/mc/Session.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2015-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2015-2020. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -6,6 +6,10 @@ #include "src/mc/Session.hpp" #include "src/mc/checker/Checker.hpp" #include "src/mc/mc_config.hpp" +#include "src/internal_config.h" // HAVE_SMPI +#if HAVE_SMPI +#include "smpi/smpi.h" +#endif #include "src/mc/mc_private.hpp" #include "src/mc/mc_state.hpp" #include "xbt/log.h" @@ -23,6 +27,10 @@ namespace mc { static void setup_child_environment(int socket) { + /* On startup, simix_global_init() calls simgrid::mc::Client::initialize(), which checks whether the MC_ENV_SOCKET_FD + * env variable is set. If so, MC mode is assumed, and the client is setup from its side + */ + #ifdef __linux__ // Make sure we do not outlive our parent sigset_t mask; @@ -52,7 +60,8 @@ static void setup_child_environment(int socket) Session::Session(const std::function& code) { #if HAVE_SMPI - xbt_assert(smpi_privatize_global_variables != SmpiPrivStrategies::MMAP, + smpi_init_options();//only performed once + xbt_assert(smpi_cfg_privatization() != SmpiPrivStrategies::MMAP, "Please use the dlopen privatization schema when model-checking SMPI code"); #endif @@ -70,7 +79,7 @@ Session::Session(const std::function& code) ::close(sockets[1]); setup_child_environment(sockets[0]); code(); - xbt_die("The model-checked process failed to exec()"); + xbt_die("The model-checked process failed to exec(): %s", strerror(errno)); } // Parent (model-checker): @@ -90,6 +99,7 @@ Session::~Session() this->close(); } +/** Take the initial snapshot of the application, that must be stopped. */ void Session::initialize() { xbt_assert(initial_snapshot_ == nullptr); @@ -118,7 +128,8 @@ void Session::log_state() } if (getenv("SIMGRID_MC_SYSTEM_STATISTICS")){ int ret=system("free"); - if(ret!=0)XBT_WARN("system call did not return 0, but %d",ret); + if (ret != 0) + XBT_WARN("Call to system(free) did not return 0, but %d", ret); } }