s_smx_synchro_t comm;
mc_model_checker->process().read(&comm, remote(comm_addr));
- smx_process_t src_proc = MC_smx_resolve_process(simgrid::mc::remote(comm.comm.src_proc));
- smx_process_t dst_proc = MC_smx_resolve_process(simgrid::mc::remote(comm.comm.dst_proc));
+ smx_process_t src_proc = mc_model_checker->process().resolveProcess(
+ simgrid::mc::remote(comm.comm.src_proc));
+ smx_process_t dst_proc = mc_model_checker->process().resolveProcess(
+ simgrid::mc::remote(comm.comm.dst_proc));
comm_pattern->src_proc = src_proc->pid;
comm_pattern->dst_proc = dst_proc->pid;
comm_pattern->src_host = MC_smx_process_get_host_name(src_proc);
char* remote_name = mc_model_checker->process().read<char*>(
(std::uint64_t)(synchro.comm.rdv ? &synchro.comm.rdv->name : &synchro.comm.rdv_cpy->name));
pattern->rdv = mc_model_checker->process().read_string(remote_name);
- pattern->src_proc = MC_smx_resolve_process(simgrid::mc::remote(synchro.comm.src_proc))->pid;
+ pattern->src_proc = mc_model_checker->process().resolveProcess(
+ simgrid::mc::remote(synchro.comm.src_proc))->pid;
pattern->src_host = MC_smx_process_get_host_name(issuer);
struct s_smpi_mpi_request mpi_request =
mc_model_checker->process().read(&remote_name,
remote(synchro.comm.rdv ? &synchro.comm.rdv->name : &synchro.comm.rdv_cpy->name));
pattern->rdv = mc_model_checker->process().read_string(remote_name);
- pattern->dst_proc = MC_smx_resolve_process(simgrid::mc::remote(synchro.comm.dst_proc))->pid;
+ pattern->dst_proc = mc_model_checker->process().resolveProcess(
+ simgrid::mc::remote(synchro.comm.dst_proc))->pid;
pattern->dst_host = MC_smx_process_get_host_name(issuer);
} else
xbt_die("Unexpected call_type %i", (int) call_type);
/** Representation of a process
*
- * This class is mixing a lot of differents responsabilities and is tied
- * to SIMIX. It should probably split into different classes.
+ * This class is mixing a lot of different responsabilities and is tied
+ * to SIMIX. It should probably be split into different classes.
*
* Responsabilities:
*
std::vector<simgrid::mc::SimixProcessInformation>& simix_processes();
std::vector<simgrid::mc::SimixProcessInformation>& old_simix_processes();
+ /** Get a local description of a remote SIMIX process */
+ simgrid::mc::SimixProcessInformation* resolveProcessInfo(
+ simgrid::mc::RemotePtr<s_smx_process_t> process)
+ {
+ xbt_assert(mc_mode == MC_MODE_SERVER);
+ if (!process)
+ return nullptr;
+ this->refresh_simix();
+ for (auto& process_info : this->smx_process_infos)
+ if (process_info.address == process)
+ return &process_info;
+ for (auto& process_info : this->smx_old_process_infos)
+ if (process_info.address == process)
+ return &process_info;
+ return nullptr;
+ }
+
+ /** Get a local copy of the SIMIX process structure */
+ smx_process_t resolveProcess(simgrid::mc::RemotePtr<s_smx_process_t> process)
+ {
+ simgrid::mc::SimixProcessInformation* process_info =
+ this->resolveProcessInfo(process);
+ if (process_info)
+ return &process_info->copy;
+ else
+ return nullptr;
+ }
+
void dumpStack();
private:
if(mutex->owner == nullptr)
return true;
#if HAVE_MC
- else if (mc_mode == MC_MODE_SERVER)
+ else if (mc_mode == MC_MODE_SERVER) {
+ simgrid::mc::Process& modelchecked = mc_model_checker->process();
// TODO, *(mutex->owner) :/
- return MC_smx_resolve_process(simgrid::mc::remote(mutex->owner))->pid ==
- MC_smx_resolve_process(simgrid::mc::remote(req->issuer))->pid;
+ return modelchecked.resolveProcess(simgrid::mc::remote(mutex->owner))->pid
+ == modelchecked.resolveProcess(simgrid::mc::remote(req->issuer))->pid;
+ }
#endif
else
return mutex->owner->pid == req->issuer->pid;
} else
act = remote_act;
- smx_process_t src_proc = MC_smx_resolve_process(simgrid::mc::remote(act->comm.src_proc));
- smx_process_t dst_proc = MC_smx_resolve_process(simgrid::mc::remote(act->comm.dst_proc));
+ smx_process_t src_proc = mc_model_checker->process().resolveProcess(
+ simgrid::mc::remote(act->comm.src_proc));
+ smx_process_t dst_proc = mc_model_checker->process().resolveProcess(
+ simgrid::mc::remote(act->comm.dst_proc));
args = bprintf("comm=%s [(%lu)%s (%s)-> (%lu)%s (%s)]", p,
src_proc ? src_proc->pid : 0,
src_proc ? MC_smx_process_get_host_name(src_proc) : "",
type = "Test TRUE";
p = pointer_to_string(remote_act);
- smx_process_t src_proc = MC_smx_resolve_process(simgrid::mc::remote(act->comm.src_proc));
- smx_process_t dst_proc = MC_smx_resolve_process(simgrid::mc::remote(act->comm.dst_proc));
+ smx_process_t src_proc = mc_model_checker->process().resolveProcess(
+ simgrid::mc::remote(act->comm.src_proc));
+ smx_process_t dst_proc = mc_model_checker->process().resolveProcess(
+ simgrid::mc::remote(act->comm.dst_proc));
args = bprintf("comm=%s [(%lu)%s (%s) -> (%lu)%s (%s)]", p,
src_proc->pid,
MC_smx_process_get_name(src_proc),
args = bprintf("locked = %d, owner = %d, sleeping = %d",
mutex.locked,
- mutex.owner != nullptr ? (int) MC_smx_resolve_process(simgrid::mc::remote(mutex.owner))->pid : -1,
+ mutex.owner != nullptr ? (int) mc_model_checker->process().resolveProcess(
+ simgrid::mc::remote(mutex.owner))->pid : -1,
mutex_sleeping.count);
break;
}
mc_model_checker->process().read_bytes(&synchro,
sizeof(synchro), remote(remote_act));
- smx_process_t src_proc = MC_smx_resolve_process(simgrid::mc::remote(synchro.comm.src_proc));
- smx_process_t dst_proc = MC_smx_resolve_process(simgrid::mc::remote(synchro.comm.dst_proc));
+ smx_process_t src_proc = mc_model_checker->process().resolveProcess(
+ simgrid::mc::remote(synchro.comm.src_proc));
+ smx_process_t dst_proc = mc_model_checker->process().resolveProcess(
+ simgrid::mc::remote(synchro.comm.dst_proc));
if (issuer->host)
label = simgrid::xbt::string_printf("[(%lu)%s] Wait [(%lu)->(%lu)]",
issuer->pid,
xbt_die("Issuer not found");
}
-smx_process_t MC_smx_resolve_process(
- simgrid::mc::RemotePtr<s_smx_process_t> process_remote_address)
-{
- xbt_assert(mc_mode == MC_MODE_SERVER);
-
- if (!process_remote_address)
- return nullptr;
-
- simgrid::mc::SimixProcessInformation* process_info =
- MC_smx_resolve_process_info(process_remote_address);
- if (process_info)
- return &process_info->copy;
- else
- return nullptr;
-}
-
-simgrid::mc::SimixProcessInformation* MC_smx_resolve_process_info(
- simgrid::mc::RemotePtr<s_smx_process_t> process_remote_address)
-{
- xbt_assert(mc_mode == MC_MODE_SERVER);
-
- for (auto& process_info : mc_model_checker->process().smx_process_infos)
- if (process_info.address == process_remote_address)
- return &process_info;
- for (auto& process_info : mc_model_checker->process().smx_old_process_infos)
- if (process_info.address == process_remote_address)
- return &process_info;
- xbt_die("Process info not found");
-}
-
const char* MC_smx_process_get_host_name(smx_process_t p)
{
if (mc_mode == MC_MODE_CLIENT)
XBT_PRIVATE int MC_smpi_process_count(void);
-
-/* ***** Resolve (local/MCer structure from remote/MCed addresses) ***** */
-
-/** Get a local copy of the process from the process remote address */
-XBT_PRIVATE smx_process_t MC_smx_resolve_process(
- simgrid::mc::RemotePtr<s_smx_process_t> process_remote_address);
-
-/** Get the process info structure from the process remote address */
-XBT_PRIVATE simgrid::mc::SimixProcessInformation* MC_smx_resolve_process_info(
- simgrid::mc::RemotePtr<s_smx_process_t> process_remote_address);
-
XBT_PRIVATE unsigned long MC_smx_get_maxpid(void);
SG_END_DECL()