From 0e200118fcdf795310764eddad476261b8698ecf Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Wed, 6 May 2020 00:22:17 +0200 Subject: [PATCH] further simplify the MC initialization --- src/mc/Session.cpp | 9 +++++---- src/mc/checker/simgrid_mc.cpp | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/mc/Session.cpp b/src/mc/Session.cpp index a925128e37..669345d583 100644 --- a/src/mc/Session.cpp +++ b/src/mc/Session.cpp @@ -25,7 +25,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_Session, mc, "Model-checker session"); namespace simgrid { namespace mc { -static void setup_child_environment(int socket) +static void run_child_process(int socket, const std::function& code) { /* 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 @@ -52,6 +52,8 @@ static void setup_child_environment(int socket) int res = std::snprintf(buffer, sizeof(buffer), "%i", socket); xbt_assert((size_t)res < sizeof(buffer) && res != -1); setenv(MC_ENV_SOCKET_FD, buffer, 1); + + code(); } Session::Session(const std::function& code) @@ -74,9 +76,8 @@ Session::Session(const std::function& code) if (pid == 0) { // Child ::close(sockets[1]); - setup_child_environment(sockets[0]); - code(); - xbt_die("The model-checked process failed to exec(): %s", strerror(errno)); + run_child_process(sockets[0], code); + DIE_IMPOSSIBLE; } // Parent (model-checker): diff --git a/src/mc/checker/simgrid_mc.cpp b/src/mc/checker/simgrid_mc.cpp index d8544e5476..ff0fda6353 100644 --- a/src/mc/checker/simgrid_mc.cpp +++ b/src/mc/checker/simgrid_mc.cpp @@ -61,6 +61,7 @@ int main(int argc, char** argv) xbt_assert(argv_copy[i] != nullptr, "Unable to find a binary to exec on the command line. Did you only pass config flags?"); execvp(argv_copy[i], argv_copy + i); + xbt_die("The model-checked process failed to exec(): %s", strerror(errno)); }); delete[] argv_copy; -- 2.30.2