- while (cursor < xbt_dynar_length(initial_pattern)) {
- comm1 =
- (mc_comm_pattern_t) xbt_dynar_get_as(initial_pattern, cursor,
- mc_comm_pattern_t);
- if (comm1->type == SIMIX_COMM_SEND && comm1->src_proc == current_process) {
- comm2 =
- get_comm_pattern_from_idx(pattern, &send_index, comm1->type,
- current_process);
- comm_comparison = compare_comm_pattern(comm1, comm2);
- if (comm_comparison == 1) {
- initial_global_state->send_deterministic = 0;
- initial_global_state->comm_deterministic = 0;
- return;
- }
- send_index++;
- } else if (comm1->type == SIMIX_COMM_RECEIVE
- && comm1->dst_proc == current_process) {
- comm2 =
- get_comm_pattern_from_idx(pattern, &recv_index, comm1->type,
- current_process);
- comm_comparison = compare_comm_pattern(comm1, comm2);
- if (comm_comparison == 1) {
- initial_global_state->comm_deterministic = 0;
- if (!_sg_mc_send_determinism)
+ process_comms_pattern1 = (xbt_dynar_t)xbt_dynar_get_as(initial_communications_pattern, current_process, xbt_dynar_t);
+ process_comms_pattern2 = (xbt_dynar_t)xbt_dynar_get_as(pattern, current_process, xbt_dynar_t);
+ nb_comms1 = xbt_dynar_length(process_comms_pattern1);
+ nb_comms2 = xbt_dynar_length(process_comms_pattern2);
+ if(!xbt_dynar_is_empty((xbt_dynar_t)xbt_dynar_get_as(incomplete_communications_pattern, current_process, xbt_dynar_t)))
+ xbt_die("Damn ! Some communications from the process %u are incomplete (%lu)! That means one or several simcalls are not handle.", current_process, xbt_dynar_length((xbt_dynar_t)xbt_dynar_get_as(incomplete_communications_pattern, current_process, xbt_dynar_t)));
+ if (!partial && (nb_comms1 != nb_comms2)) {
+ XBT_INFO("The total number of communications is different between the compared patterns for the process %u.\n Communication determinism verification for this process cannot be performed.", current_process);
+ initial_global_state->send_deterministic = -1;
+ initial_global_state->comm_deterministic = -1;
+ } else {
+ while (cursor < nb_comms2) {
+ comm1 = (mc_comm_pattern_t)xbt_dynar_get_as(process_comms_pattern1, cursor, mc_comm_pattern_t);
+ if (comm1->type == SIMIX_COMM_SEND) {
+ comm2 = get_comm_pattern_from_idx(process_comms_pattern2, &send_index, comm1->type, current_process);
+ if (compare_comm_pattern(comm1, comm2)) {
+ XBT_INFO("The communications pattern of the process %u is different! (Different communication : %u)", current_process, cursor+1);
+ initial_global_state->send_deterministic = 0;
+ initial_global_state->comm_deterministic = 0;