+ api::get().mc_inc_visited_states();
+ api::get().mc_inc_executed_trans();
+ }
+}
+
+void CommunicationDeterminismChecker::handle_comm_pattern(simgrid::mc::CallType call_type, smx_simcall_t req, int value, int backtracking)
+{
+ using simgrid::mc::CallType;
+ switch(call_type) {
+ case CallType::NONE:
+ break;
+ case CallType::SEND:
+ case CallType::RECV:
+ get_comm_pattern(req, call_type, backtracking);
+ break;
+ case CallType::WAIT:
+ case CallType::WAITANY: {
+ RemotePtr<simgrid::kernel::activity::CommImpl> comm_addr;
+ if (call_type == CallType::WAIT)
+ comm_addr = remote(simcall_comm_wait__getraw__comm(req));
+ else
+ comm_addr = api::get().get_comm_waitany_raw_addr(req, value);
+ auto simcall_issuer = api::get().simcall_get_issuer(req);
+ complete_comm_pattern(comm_addr, simcall_issuer->get_pid(), backtracking);
+ } break;
+ default:
+ xbt_die("Unexpected call type %i", (int)call_type);