From: Gabriel Corona Date: Mon, 16 Mar 2015 11:30:34 +0000 (+0100) Subject: [mc] Read from remote process in MC_request_get_dot_output() X-Git-Tag: v3_12~732^2~100 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/96fd5c0417b71089a11482b91915a912c32ffc6b [mc] Read from remote process in MC_request_get_dot_output() --- diff --git a/src/mc/mc_request.c b/src/mc/mc_request.c index 03089e4d95..8a97674438 100644 --- a/src/mc/mc_request.c +++ b/src/mc/mc_request.c @@ -488,8 +488,7 @@ int MC_process_is_enabled(smx_process_t process) char *MC_request_get_dot_output(smx_simcall_t req, int value) { - char *str = NULL, *label = NULL; - smx_synchro_t act = NULL; + char *label = NULL; const smx_process_t issuer = MC_smx_simcall_get_issuer(req); @@ -512,8 +511,7 @@ char *MC_request_get_dot_output(smx_simcall_t req, int value) label = bprintf("[(%lu)] iRecv", issuer->pid); break; - case SIMCALL_COMM_WAIT: - act = simcall_comm_wait__get__comm(req); + case SIMCALL_COMM_WAIT: { if (value == -1) { if (issuer->smx_host) label = @@ -522,9 +520,13 @@ char *MC_request_get_dot_output(smx_simcall_t req, int value) else label = bprintf("[(%lu)] WaitTimeout", issuer->pid); } else { - // FIXME, remote access to act->comm - smx_process_t src_proc = MC_smx_resolve_process(act->comm.src_proc); - smx_process_t dst_proc = MC_smx_resolve_process(act->comm.dst_proc); + smx_synchro_t remote_act = simcall_comm_wait__get__comm(req); + s_smx_synchro_t synchro; + MC_process_read_simple(&mc_model_checker->process, &synchro, + remote_act, sizeof(synchro)); + + smx_process_t src_proc = MC_smx_resolve_process(synchro.comm.src_proc); + smx_process_t dst_proc = MC_smx_resolve_process(synchro.comm.dst_proc); if (issuer->smx_host) label = bprintf("[(%lu)%s] Wait [(%lu)->(%lu)]", issuer->pid, @@ -538,10 +540,14 @@ char *MC_request_get_dot_output(smx_simcall_t req, int value) dst_proc ? dst_proc->pid : 0); } break; + } - case SIMCALL_COMM_TEST: - act = simcall_comm_test__get__comm(req); - if (act->comm.src_proc == NULL || act->comm.dst_proc == NULL) { + case SIMCALL_COMM_TEST: { + smx_synchro_t remote_act = simcall_comm_test__get__comm(req); + s_smx_synchro_t synchro; + MC_process_read_simple(&mc_model_checker->process, &synchro, + remote_act, sizeof(synchro)); + if (synchro.comm.src_proc == NULL || synchro.comm.dst_proc == NULL) { if (issuer->smx_host) label = bprintf("[(%lu)%s] Test FALSE", issuer->pid, @@ -557,18 +563,22 @@ char *MC_request_get_dot_output(smx_simcall_t req, int value) label = bprintf("[(%lu)] Test TRUE", issuer->pid); } break; + } - case SIMCALL_COMM_WAITANY: + case SIMCALL_COMM_WAITANY: { + unsigned long comms_size = MC_process_read_dynar_length( + &mc_model_checker->process, simcall_comm_waitany__get__comms(req)); if (issuer->smx_host) label = bprintf("[(%lu)%s] WaitAny [%d of %lu]", issuer->pid, MC_smx_process_get_host_name(issuer), value + 1, - xbt_dynar_length(simcall_comm_waitany__get__comms(req))); + comms_size); else label = bprintf("[(%lu)] WaitAny [%d of %lu]", issuer->pid, value + 1, - xbt_dynar_length(simcall_comm_waitany__get__comms(req))); + comms_size); break; + } case SIMCALL_COMM_TESTANY: if (value == -1) { @@ -627,7 +637,7 @@ char *MC_request_get_dot_output(smx_simcall_t req, int value) THROW_UNIMPLEMENTED; } - str = + char* str = bprintf("label = \"%s\", color = %s, fontcolor = %s", label, colors[issuer->pid - 1], colors[issuer->pid - 1]); xbt_free(label);