X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1e9ffea6fdfe24e3268eebcda6fa00d34d6a652b..da64c6383731d10c6174f81b4b6a20ff0ea186ae:/src/mc/explo/CommunicationDeterminismChecker.cpp diff --git a/src/mc/explo/CommunicationDeterminismChecker.cpp b/src/mc/explo/CommunicationDeterminismChecker.cpp index 31e1159c74..8a70fc7cac 100644 --- a/src/mc/explo/CommunicationDeterminismChecker.cpp +++ b/src/mc/explo/CommunicationDeterminismChecker.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2008-2022. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2008-2023. 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. */ @@ -100,7 +100,7 @@ public: std::vector communication_indices_; static simgrid::xbt::Extension EXTENSION_ID; - explicit StateCommDet(CommDetExtension& checker, RemoteApp const& remote_app) + explicit StateCommDet(CommDetExtension const& checker, RemoteApp const& remote_app) { const unsigned long maxpid = remote_app.get_maxpid(); for (unsigned long i = 0; i < maxpid; i++) { @@ -209,7 +209,7 @@ void CommDetExtension::enforce_deterministic_pattern(aid_t actor, const PatternC XBT_INFO("*********************************************************"); XBT_INFO("%s", send_diff.c_str()); exploration_.log_state(); - mc_model_checker->exit(SIMGRID_MC_EXIT_NON_DETERMINISM); + throw McError(ExitStatus::NON_DETERMINISM); } else if (_sg_mc_comms_determinism && (not send_deterministic && not recv_deterministic)) { XBT_INFO("****************************************************"); XBT_INFO("***** Non-deterministic communications pattern *****"); @@ -219,7 +219,7 @@ void CommDetExtension::enforce_deterministic_pattern(aid_t actor, const PatternC if (not recv_diff.empty()) XBT_INFO("%s", recv_diff.c_str()); exploration_.log_state(); - mc_model_checker->exit(SIMGRID_MC_EXIT_NON_DETERMINISM); + throw McError(ExitStatus::NON_DETERMINISM); } } } @@ -235,7 +235,7 @@ void CommDetExtension::get_comm_pattern(const Transition* transition) pattern->index = initial_pattern.index_comm + incomplete_pattern.size(); if (transition->type_ == Transition::Type::COMM_ASYNC_SEND) { - auto* send = static_cast(transition); + const auto* send = static_cast(transition); pattern->type = PatternCommunicationType::send; pattern->comm_addr = send->get_comm(); @@ -244,7 +244,7 @@ void CommDetExtension::get_comm_pattern(const Transition* transition) // FIXME: Detached sends should be enforced when the receive is waited } else if (transition->type_ == Transition::Type::COMM_ASYNC_RECV) { - auto* recv = static_cast(transition); + const auto* recv = static_cast(transition); pattern->type = PatternCommunicationType::receive; pattern->comm_addr = recv->get_comm(); @@ -320,15 +320,15 @@ void CommDetExtension::handle_comm_pattern(const Transition* transition) } */ -Exploration* create_communication_determinism_checker(const std::vector& args, bool with_dpor) +Exploration* create_communication_determinism_checker(const std::vector& args, ReductionMode mode) { CommDetExtension::EXTENSION_ID = simgrid::mc::Exploration::extension_create(); StateCommDet::EXTENSION_ID = simgrid::mc::State::extension_create(); XBT_DEBUG("********* Start communication determinism verification *********"); - auto base = new DFSExplorer(args, with_dpor); - auto extension = new CommDetExtension(*base); + auto* base = new DFSExplorer(args, mode, true); + auto* extension = new CommDetExtension(*base); DFSExplorer::on_exploration_start([extension](RemoteApp const&) { XBT_INFO("Check communication determinism");