mc_libsimgrid_info = MC_find_object_info(maps, libsimgrid_path, 0);
mc_object_infos[1] = mc_libsimgrid_info;
-#ifdef MADV_MERGEABLE
- for(int i=0; i!=mc_object_infos_size; ++i) {
- void* start = mc_object_infos[i]->start_rw;
- void* end = mc_object_infos[i]->end_rw;
- madvise(start, (char*)end - (char*)start, MADV_MERGEABLE);
- }
-#endif
-
// Use information of the other objects:
MC_post_process_object_info(mc_binary_info);
MC_post_process_object_info(mc_libsimgrid_info);
MC_ignore_global_variable("mc_comp_times");
MC_ignore_global_variable("mc_snapshot_comparison_time");
MC_ignore_global_variable("mc_time");
- MC_ignore_global_variable("smpi_current_rank");
MC_ignore_global_variable("counter"); /* Static variable used for tracing */
MC_ignore_global_variable("maestro_stack_start");
MC_ignore_global_variable("maestro_stack_end");
}
MC_SET_RAW_MEM;
- xbt_dict_reset(first_enabled_state);
- xbt_swag_foreach(process, simix_global->process_list){
- if(MC_process_is_enabled(process)){
+
+ if(mc_reduce_kind == e_mc_reduce_dpor){
+ xbt_dict_reset(first_enabled_state);
+ xbt_swag_foreach(process, simix_global->process_list){
+ if(MC_process_is_enabled(process)){
char *key = bprintf("%lu", process->pid);
char *data = bprintf("%d", count);
xbt_dict_set(first_enabled_state, key, data, NULL);
xbt_free(key);
+ }
}
}
- if(_sg_mc_comms_determinism || _sg_mc_send_determinism)
+
+ if(_sg_mc_comms_determinism || _sg_mc_send_determinism){
xbt_dynar_reset(communications_pattern);
+ xbt_dynar_reset(incomplete_communications_pattern);
+ }
+
MC_UNSET_RAW_MEM;
state = (mc_state_t) xbt_fifo_get_item_content(item);
saved_req = MC_state_get_executed_request(state, &value);
- MC_SET_RAW_MEM;
- char *key = bprintf("%lu", saved_req->issuer->pid);
- xbt_dict_remove(first_enabled_state, key);
- xbt_free(key);
- MC_UNSET_RAW_MEM;
+ if(mc_reduce_kind == e_mc_reduce_dpor){
+ MC_SET_RAW_MEM;
+ char *key = bprintf("%lu", saved_req->issuer->pid);
+ xbt_dict_remove(first_enabled_state, key);
+ xbt_free(key);
+ MC_UNSET_RAW_MEM;
+ }
if(saved_req){
/* because we got a copy of the executed request, we have to fetch the
if(req->call == SIMCALL_COMM_ISEND)
comm_pattern = 1;
else if(req->call == SIMCALL_COMM_IRECV)
- comm_pattern = 2;
+ comm_pattern = 2;
}
SIMIX_simcall_pre(req, value);
count++;
- MC_SET_RAW_MEM;
- /* Insert in dict all enabled processes */
- xbt_swag_foreach(process, simix_global->process_list){
- if(MC_process_is_enabled(process) /*&& !MC_state_process_is_done(state, process)*/){
- char *key = bprintf("%lu", process->pid);
- if(xbt_dict_get_or_null(first_enabled_state, key) == NULL){
- char *data = bprintf("%d", count);
- xbt_dict_set(first_enabled_state, key, data, NULL);
+ if(mc_reduce_kind == e_mc_reduce_dpor){
+ MC_SET_RAW_MEM;
+ /* Insert in dict all enabled processes */
+ xbt_swag_foreach(process, simix_global->process_list){
+ if(MC_process_is_enabled(process) /*&& !MC_state_process_is_done(state, process)*/){
+ char *key = bprintf("%lu", process->pid);
+ if(xbt_dict_get_or_null(first_enabled_state, key) == NULL){
+ char *data = bprintf("%d", count);
+ xbt_dict_set(first_enabled_state, key, data, NULL);
+ }
+ xbt_free(key);
}
- xbt_free(key);
}
+ MC_UNSET_RAW_MEM;
}
- MC_UNSET_RAW_MEM;
/* Update statistics */
mc_stats->visited_states++;
void MC_print_statistics(mc_stats_t stats)
{
+ xbt_mheap_t previous_heap = mmalloc_get_current_heap();
+
if(stats->expanded_pairs == 0){
XBT_INFO("Expanded states = %lu", stats->expanded_states);
XBT_INFO("Visited states = %lu", stats->visited_states);
XBT_INFO("Visited pairs = %lu", stats->visited_pairs);
}
XBT_INFO("Executed transitions = %lu", stats->executed_transitions);
+
MC_SET_RAW_MEM;
if((_sg_mc_dot_output_file != NULL) && (_sg_mc_dot_output_file[0]!='\0')){
fprintf(dot_output, "}\n");
if (_sg_mc_send_determinism)
XBT_INFO("Send-deterministic : %s", !initial_state_safety->send_deterministic ? "No" : "Yes");
}
- MC_UNSET_RAW_MEM;
+ mmalloc_set_current_heap(previous_heap);
}
void MC_assert(int prop)