X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a6b23c846948f7f89277f75e7c42f3942b31b8d3..c8880fd8bfe302109bdec0629929499479d714b0:/src/mc/mc_request.c diff --git a/src/mc/mc_request.c b/src/mc/mc_request.c index cb13045859..4d8154e557 100644 --- a/src/mc/mc_request.c +++ b/src/mc/mc_request.c @@ -228,7 +228,7 @@ static char *buff_size_to_string(size_t buff_size) char *MC_request_to_string(smx_simcall_t req, int value) { char *type = NULL, *args = NULL, *str = NULL, *p = NULL, *bs = NULL; - smx_action_t act = NULL; + smx_synchro_t act = NULL; size_t size = 0; switch (req->call) { @@ -305,7 +305,7 @@ char *MC_request_to_string(smx_simcall_t req, int value) if (!xbt_dynar_is_empty(simcall_comm_waitany__get__comms(req))) { p = pointer_to_string(xbt_dynar_get_as (simcall_comm_waitany__get__comms(req), value, - smx_action_t)); + smx_synchro_t)); args = bprintf("comm=%s (%d of %lu)", p, value + 1, xbt_dynar_length(simcall_comm_waitany__get__comms(req))); @@ -367,7 +367,7 @@ char *MC_request_to_string(smx_simcall_t req, int value) unsigned int MC_request_testany_fail(smx_simcall_t req) { unsigned int cursor; - smx_action_t action; + smx_synchro_t action; xbt_dynar_foreach(simcall_comm_testany__get__comms(req), cursor, action) { if (action->comm.src_proc && action->comm.dst_proc) @@ -393,51 +393,44 @@ int MC_request_is_visible(smx_simcall_t req) int MC_request_is_enabled(smx_simcall_t req) { unsigned int index = 0; - smx_action_t act; + smx_synchro_t act = 0; switch (req->call) { + case SIMCALL_NONE: + return FALSE; case SIMCALL_COMM_WAIT: /* FIXME: check also that src and dst processes are not suspended */ - - /* If it has a timeout it will be always be enabled, because even if the - * communication is not ready, it can timeout and won't block. - * On the other hand if it hasn't a timeout, check if the comm is ready.*/ + act = simcall_comm_wait__get__comm(req); if (simcall_comm_wait__get__timeout(req) >= 0) { - if (_sg_mc_timeout == 1) { + /* If it has a timeout it will be always be enabled, because even if the + * communication is not ready, it can timeout and won't block. */ + if (_sg_mc_timeout == 1) return TRUE; - } else { - act = simcall_comm_wait__get__comm(req); - return (act->comm.src_proc && act->comm.dst_proc); - } } else { - act = simcall_comm_wait__get__comm(req); + /* On the other hand if it hasn't a timeout, check if the comm is ready.*/ if (act->comm.detached && act->comm.src_proc == NULL && act->comm.type == SIMIX_COMM_READY) return (act->comm.dst_proc != NULL); - return (act->comm.src_proc && act->comm.dst_proc); } - break; + return (act->comm.src_proc && act->comm.dst_proc); case SIMCALL_COMM_WAITANY: /* Check if it has at least one communication ready */ - xbt_dynar_foreach(simcall_comm_waitany__get__comms(req), index, act) { - if (act->comm.src_proc && act->comm.dst_proc) { + xbt_dynar_foreach(simcall_comm_waitany__get__comms(req), index, act) + if (act->comm.src_proc && act->comm.dst_proc) return TRUE; - } - } return FALSE; - break; default: - /* The rest of the request are always enabled */ + /* The rest of the requests are always enabled */ return TRUE; } } int MC_request_is_enabled_by_idx(smx_simcall_t req, unsigned int idx) { - smx_action_t act; + smx_synchro_t act; switch (req->call) { @@ -450,14 +443,14 @@ int MC_request_is_enabled_by_idx(smx_simcall_t req, unsigned int idx) case SIMCALL_COMM_WAITANY: act = xbt_dynar_get_as(simcall_comm_waitany__get__comms(req), idx, - smx_action_t); + smx_synchro_t); return (act->comm.src_proc && act->comm.dst_proc); break; case SIMCALL_COMM_TESTANY: act = xbt_dynar_get_as(simcall_comm_testany__get__comms(req), idx, - smx_action_t); + smx_synchro_t); return (act->comm.src_proc && act->comm.dst_proc); break; @@ -468,18 +461,14 @@ int MC_request_is_enabled_by_idx(smx_simcall_t req, unsigned int idx) int MC_process_is_enabled(smx_process_t process) { - if (process->simcall.call != SIMCALL_NONE - && MC_request_is_enabled(&process->simcall)) - return TRUE; - - return FALSE; + return MC_request_is_enabled(&process->simcall); } char *MC_request_get_dot_output(smx_simcall_t req, int value) { char *str = NULL, *label = NULL; - smx_action_t act = NULL; + smx_synchro_t act = NULL; switch (req->call) { case SIMCALL_COMM_ISEND: