X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8f57bc97b644d249c36bb311efe044557bc046ed..3880093b08b4663a22f6ea9c35e7dfa7248a5491:/src/mc/ModelChecker.cpp diff --git a/src/mc/ModelChecker.cpp b/src/mc/ModelChecker.cpp index 2031feffc5..2b1d6d980c 100644 --- a/src/mc/ModelChecker.cpp +++ b/src/mc/ModelChecker.cpp @@ -38,7 +38,6 @@ ModelChecker::ModelChecker(std::unique_ptr process) , signal_event_(nullptr) , page_store_(500) , process_(std::move(process)) - , parent_snapshot_(nullptr) { } @@ -54,8 +53,6 @@ ModelChecker::~ModelChecker() { void ModelChecker::start() { - const pid_t pid = process_->pid(); - base_ = event_base_new(); event_callback_fn event_callback = [](evutil_socket_t fd, short events, void *arg) { @@ -73,6 +70,8 @@ void ModelChecker::start() int status; // The model-checked process SIGSTOP itself to signal it's ready: + const pid_t pid = process_->pid(); + pid_t res = waitpid(pid, &status, WAITPID_CHECKED_FLAGS); if (res < 0 || not WIFSTOPPED(status) || WSTOPSIG(status) != SIGSTOP) xbt_die("Could not wait model-checked process"); @@ -142,17 +141,19 @@ static void MC_report_crash(int status) XBT_INFO("From signal: %s", strsignal(WTERMSIG(status))); else if (WIFEXITED(status)) XBT_INFO("From exit: %i", WEXITSTATUS(status)); - if (WCOREDUMP(status)) - XBT_INFO("A core dump was generated by the system."); - else - XBT_INFO("No core dump was generated by the system."); + if (not xbt_log_no_loc) + XBT_INFO("%s core dump was generated by the system.", WCOREDUMP(status) ? "A" : "No"); XBT_INFO("Counter-example execution trace:"); for (auto const& s : mc_model_checker->getChecker()->get_textual_trace()) XBT_INFO(" %s", s.c_str()); simgrid::mc::dumpRecordPath(); simgrid::mc::session->log_state(); - XBT_INFO("Stack trace:"); - mc_model_checker->process().dump_stack(); + if (xbt_log_no_loc) { + XBT_INFO("Stack trace not displayed because you passed --log=no_loc"); + } else { + XBT_INFO("Stack trace:"); + mc_model_checker->process().dump_stack(); + } } static void MC_report_assertion_error() @@ -337,7 +338,10 @@ void ModelChecker::handle_waitpid() xbt_die("Could not PTRACE_CONT"); } - else if (WIFEXITED(status) || WIFSIGNALED(status)) { + else if (WIFSIGNALED(status)) { + MC_report_crash(status); + mc_model_checker->exit(SIMGRID_MC_EXIT_PROGRAM_CRASH); + } else if (WIFEXITED(status)) { XBT_DEBUG("Child process is over"); this->process().terminate(); } @@ -363,8 +367,8 @@ void ModelChecker::handle_simcall(Transition const& transition) s_mc_message_simcall_handle_t m; memset(&m, 0, sizeof(m)); m.type = MC_MESSAGE_SIMCALL_HANDLE; - m.pid = transition.pid; - m.value = transition.argument; + m.pid = transition.pid_; + m.value = transition.argument_; this->process_->get_channel().send(m); this->process_->clear_cache(); if (this->process_->running())