/********** Non Static functions ***********/
-void CommunicationDeterminismChecker::get_comm_pattern(xbt_dynar_t list, smx_simcall_t request,
- e_mc_call_type_t call_type, int backtracking)
+void CommunicationDeterminismChecker::get_comm_pattern(smx_simcall_t request, e_mc_call_type_t call_type,
+ int backtracking)
{
const smx_actor_t issuer = MC_smx_simcall_get_issuer(request);
simgrid::mc::PatternCommunicationList* initial_pattern =
xbt_dynar_get_as(initial_communications_pattern, issuer->get_pid(), simgrid::mc::PatternCommunicationList*);
xbt_dynar_t incomplete_pattern = xbt_dynar_get_as(incomplete_communications_pattern, issuer->get_pid(), xbt_dynar_t);
- std::unique_ptr<simgrid::mc::PatternCommunication> pattern =
- std::unique_ptr<simgrid::mc::PatternCommunication>(new simgrid::mc::PatternCommunication());
+ std::unique_ptr<simgrid::mc::PatternCommunication> pattern(new simgrid::mc::PatternCommunication());
pattern->index = initial_pattern->index_comm + xbt_dynar_length(incomplete_pattern);
if (call_type == MC_CALL_TYPE_SEND) {
}
void CommunicationDeterminismChecker::complete_comm_pattern(
- xbt_dynar_t list, simgrid::mc::RemotePtr<simgrid::kernel::activity::CommImpl> comm_addr, unsigned int issuer,
- int backtracking)
+ simgrid::mc::RemotePtr<simgrid::kernel::activity::CommImpl> comm_addr, unsigned int issuer, int backtracking)
{
simgrid::mc::PatternCommunication* current_comm_pattern;
unsigned int cursor = 0;
completed = 1;
simgrid::mc::PatternCommunication* temp;
xbt_dynar_remove_at(xbt_dynar_get_as(incomplete_communications_pattern, issuer, xbt_dynar_t), cursor, &temp);
- comm_pattern = std::unique_ptr<simgrid::mc::PatternCommunication>(temp);
+ comm_pattern.reset(temp);
XBT_DEBUG("Remove incomplete comm pattern for process %u at cursor %u", issuer, cursor);
break;
}
}
}
-CommunicationDeterminismChecker::CommunicationDeterminismChecker(Session& session) : Checker(session)
+CommunicationDeterminismChecker::CommunicationDeterminismChecker(Session& s) : Checker(s)
{
}
void CommunicationDeterminismChecker::restoreState()
{
/* Intermediate backtracking */
- simgrid::mc::State* state = stack_.back().get();
- if (state->system_state) {
- simgrid::mc::restore_snapshot(state->system_state);
- MC_restore_communications_pattern(state);
+ simgrid::mc::State* last_state = stack_.back().get();
+ if (last_state->system_state) {
+ simgrid::mc::restore_snapshot(last_state->system_state);
+ MC_restore_communications_pattern(last_state);
return;
}
/* TODO : handle test and testany simcalls */
e_mc_call_type_t call = MC_get_call_type(req);
mc_model_checker->handle_simcall(state->transition);
- MC_handle_comm_pattern(call, req, req_num, nullptr, 1);
+ MC_handle_comm_pattern(call, req, req_num, 1);
mc_model_checker->wait_for_requests();
/* Update statistics */
while (not stack_.empty()) {
/* Get current state */
- simgrid::mc::State* state = stack_.back().get();
+ simgrid::mc::State* cur_state = stack_.back().get();
XBT_DEBUG("**************************************************");
- XBT_DEBUG("Exploration depth = %zu (state = %d, interleaved processes = %zu)", stack_.size(), state->num,
- state->interleaveSize());
+ XBT_DEBUG("Exploration depth = %zu (state = %d, interleaved processes = %zu)", stack_.size(), cur_state->num,
+ cur_state->interleaveSize());
/* Update statistics */
mc_model_checker->visited_states++;
if (stack_.size() <= (std::size_t)_sg_mc_max_depth)
- req = MC_state_get_request(state);
+ req = MC_state_get_request(cur_state);
else
req = nullptr;
if (req != nullptr && visited_state == nullptr) {
- int req_num = state->transition.argument;
+ int req_num = cur_state->transition.argument;
XBT_DEBUG("Execute: %s", simgrid::mc::request_to_string(req, req_num, simgrid::mc::RequestType::simix).c_str());
call = MC_get_call_type(req);
/* Answer the request */
- mc_model_checker->handle_simcall(state->transition);
+ mc_model_checker->handle_simcall(cur_state->transition);
/* After this call req is no longer useful */
- if (not this->initial_communications_pattern_done)
- MC_handle_comm_pattern(call, req, req_num, initial_communications_pattern, 0);
- else
- MC_handle_comm_pattern(call, req, req_num, nullptr, 0);
+ MC_handle_comm_pattern(call, req, req_num, 0);
/* Wait for requests (schedules processes) */
mc_model_checker->wait_for_requests();
next_state->addInterleavingSet(actor.copy.getBuffer());
if (dot_output != nullptr)
- fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n",
- state->num, next_state->num, req_str.c_str());
+ fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", cur_state->num, next_state->num, req_str.c_str());
} else if (dot_output != nullptr)
- fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num,
+ fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", cur_state->num,
visited_state->original_num == -1 ? visited_state->num : visited_state->original_num, req_str.c_str());
stack_.push_back(std::move(next_state));
this->initial_communications_pattern_done = 1;
/* Trash the current state, no longer needed */
- XBT_DEBUG("Delete state %d at depth %zu", state->num, stack_.size());
+ XBT_DEBUG("Delete state %d at depth %zu", cur_state->num, stack_.size());
stack_.pop_back();
visited_state = nullptr;
this->real_run();
}
-Checker* createCommunicationDeterminismChecker(Session& session)
+Checker* createCommunicationDeterminismChecker(Session& s)
{
- return new CommunicationDeterminismChecker(session);
+ return new CommunicationDeterminismChecker(s);
}
}