-namespace simgrid {
-namespace mc {
-
-void CommunicationDeterminismChecker::deterministic_comm_pattern(aid_t process, const PatternCommunication* comm,
- int backtracking)
-{
- if (not backtracking) {
- PatternCommunicationList& list = initial_communications_pattern[process];
- CommPatternDifference diff = compare_comm_pattern(list.list[list.index_comm].get(), comm);
-
- if (diff != CommPatternDifference::NONE) {
- if (comm->type == PatternCommunicationType::send) {
- this->send_deterministic = false;
- if (this->send_diff != nullptr)
- xbt_free(this->send_diff);
- this->send_diff = print_determinism_result(diff, process, comm, list.index_comm + 1);
- } else {
- this->recv_deterministic = false;
- if (this->recv_diff != nullptr)
- xbt_free(this->recv_diff);
- this->recv_diff = print_determinism_result(diff, process, comm, list.index_comm + 1);
- }
- if (_sg_mc_send_determinism && not this->send_deterministic) {
- XBT_INFO("*********************************************************");
- XBT_INFO("***** Non-send-deterministic communications pattern *****");
- XBT_INFO("*********************************************************");
- XBT_INFO("%s", this->send_diff);
- xbt_free(this->send_diff);
- this->send_diff = nullptr;
- api::get().log_state();
- api::get().mc_exit(SIMGRID_MC_EXIT_NON_DETERMINISM);
- } else if (_sg_mc_comms_determinism && (not this->send_deterministic && not this->recv_deterministic)) {
- XBT_INFO("****************************************************");
- XBT_INFO("***** Non-deterministic communications pattern *****");
- XBT_INFO("****************************************************");
- if (this->send_diff) {
- XBT_INFO("%s", this->send_diff);
- xbt_free(this->send_diff);
- this->send_diff = nullptr;
- }
- if (this->recv_diff) {
- XBT_INFO("%s", this->recv_diff);
- xbt_free(this->recv_diff);
- this->recv_diff = nullptr;
- }
- api::get().log_state();
- api::get().mc_exit(SIMGRID_MC_EXIT_NON_DETERMINISM);
- }
+ if (diff != CommPatternDifference::NONE) {
+ if (comm->type == PatternCommunicationType::send) {
+ send_deterministic = false;
+ send_diff = print_determinism_result(diff, actor, comm, list.index_comm + 1);
+ } else {
+ recv_deterministic = false;
+ recv_diff = print_determinism_result(diff, actor, comm, list.index_comm + 1);
+ }
+ if (_sg_mc_send_determinism && not send_deterministic) {
+ XBT_INFO("*********************************************************");
+ XBT_INFO("***** Non-send-deterministic communications pattern *****");
+ XBT_INFO("*********************************************************");
+ XBT_INFO("%s", send_diff.c_str());
+ api::get().log_state();
+ api::get().mc_exit(SIMGRID_MC_EXIT_NON_DETERMINISM);
+ } else if (_sg_mc_comms_determinism && (not send_deterministic && not recv_deterministic)) {
+ XBT_INFO("****************************************************");
+ XBT_INFO("***** Non-deterministic communications pattern *****");
+ XBT_INFO("****************************************************");
+ if (not send_diff.empty())
+ XBT_INFO("%s", send_diff.c_str());
+ if (not recv_diff.empty())
+ XBT_INFO("%s", recv_diff.c_str());
+ api::get().log_state();
+ api::get().mc_exit(SIMGRID_MC_EXIT_NON_DETERMINISM);