X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0e13f3fc6dd94981d4ac61482f36e3e67cb84eac..a54175e90d04978852c09042ccb1e369a816e17c:/src/mc/mc_private.h diff --git a/src/mc/mc_private.h b/src/mc/mc_private.h index cac81a812c..4e113a0e88 100644 --- a/src/mc/mc_private.h +++ b/src/mc/mc_private.h @@ -710,7 +710,32 @@ extern xbt_dynar_t initial_communications_pattern; extern xbt_dynar_t communications_pattern; extern xbt_dynar_t incomplete_communications_pattern; -void get_comm_pattern(xbt_dynar_t communications_pattern, smx_simcall_t request, int call); +// Can we use the SIMIX syscall for this? +typedef enum mc_call_type { + MC_CALL_TYPE_NONE, + MC_CALL_TYPE_SEND, + MC_CALL_TYPE_RECV, + MC_CALL_TYPE_WAIT, + MC_CALL_TYPE_WAITANY, +} mc_call_type; + +static inline mc_call_type mc_get_call_type(smx_simcall_t req) { + switch(req->call) { + case SIMCALL_COMM_ISEND: + return MC_CALL_TYPE_SEND; + case SIMCALL_COMM_IRECV: + return MC_CALL_TYPE_RECV; + case SIMCALL_COMM_WAIT: + return MC_CALL_TYPE_WAIT; + case SIMCALL_COMM_WAITANY: + return MC_CALL_TYPE_WAITANY; + default: + return MC_CALL_TYPE_NONE; + } +} + +void get_comm_pattern(xbt_dynar_t communications_pattern, smx_simcall_t request, mc_call_type call_type); +void mc_update_comm_pattern(mc_call_type call_type, smx_simcall_t request, int value, xbt_dynar_t current_pattern); void complete_comm_pattern(xbt_dynar_t list, smx_action_t comm); void MC_pre_modelcheck_comm_determinism(void); void MC_modelcheck_comm_determinism(void); @@ -854,6 +879,13 @@ void* mc_snapshot_read_pointer_region(void* addr, mc_mem_region_t region) return *(void**) mc_snapshot_read_region(addr, region, &res, sizeof(void*)); } +#define MC_LOG_REQUEST(log, req, value) \ + if (XBT_LOG_ISENABLED(log, xbt_log_priority_debug)) { \ + char* req_str = MC_request_to_string(req, value); \ + XBT_DEBUG("Execute: %s", req_str); \ + xbt_free(req_str); \ + } + SG_END_DECL() #endif