#include "src/mc/mc_private.h"
#include "src/mc/mc_record.h"
#include "src/mc/mc_smx.h"
#include "src/mc/mc_private.h"
#include "src/mc/mc_record.h"
#include "src/mc/mc_smx.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_comm_determinism, mc,
"Logging specific to MC communication determinism detection");
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_comm_determinism, mc,
"Logging specific to MC communication determinism detection");
// Create initial_communications_pattern elements:
initial_communications_pattern = xbt_dynar_new(sizeof(mc_list_comm_pattern_t), MC_list_comm_pattern_free_voidp);
// Create initial_communications_pattern elements:
initial_communications_pattern = xbt_dynar_new(sizeof(mc_list_comm_pattern_t), MC_list_comm_pattern_free_voidp);
/* Get an enabled process and insert it in the interleave set of the initial state */
for (auto& p : mc_model_checker->process().simix_processes())
/* Get an enabled process and insert it in the interleave set of the initial state */
for (auto& p : mc_model_checker->process().simix_processes())
MC_state_interleave_process(initial_state, &p.copy);
xbt_fifo_unshift(mc_stack, initial_state);
MC_state_interleave_process(initial_state, &p.copy);
xbt_fifo_unshift(mc_stack, initial_state);
smx_simcall_t req = nullptr;
mc_state_t state = nullptr, next_state = NULL;
smx_simcall_t req = nullptr;
mc_state_t state = nullptr, next_state = NULL;
&& (req = MC_state_get_request(state, &value))
&& (visited_state == nullptr)) {
&& (req = MC_state_get_request(state, &value))
&& (visited_state == nullptr)) {
XBT_DEBUG("Execute: %s", req_str);
xbt_free(req_str);
if (dot_output != nullptr)
XBT_DEBUG("Execute: %s", req_str);
xbt_free(req_str);
if (dot_output != nullptr)
MC_state_set_executed_request(state, req, value);
mc_stats->executed_transitions++;
MC_state_set_executed_request(state, req, value);
mc_stats->executed_transitions++;
if(!initial_global_state->initial_communications_pattern_done)
MC_handle_comm_pattern(call, req, value, initial_communications_pattern, 0);
if(!initial_global_state->initial_communications_pattern_done)
MC_handle_comm_pattern(call, req, value, initial_communications_pattern, 0);
/* Get enabled processes and insert them in the interleave set of the next state */
for (auto& p : mc_model_checker->process().simix_processes())
/* Get enabled processes and insert them in the interleave set of the next state */
for (auto& p : mc_model_checker->process().simix_processes())
MC_state_interleave_process(next_state, &p.copy);
if (dot_output != nullptr)
MC_state_interleave_process(next_state, &p.copy);
if (dot_output != nullptr)
mc_model_checker->wait_for_requests();
if (mc_mode == MC_MODE_CLIENT)
// This will move somehwere else:
mc_model_checker->wait_for_requests();
if (mc_mode == MC_MODE_CLIENT)
// This will move somehwere else: