- req = MC_state_get_internal_request(state);
- xbt_fifo_foreach(mc_stack_safety, item, prev_state, mc_state_t) {
- if(MC_request_depend(req, MC_state_get_internal_request(prev_state))){
- if(XBT_LOG_ISENABLED(mc_dpor, xbt_log_priority_debug)){
- XBT_DEBUG("Dependent Transitions:");
- prev_req = MC_state_get_executed_request(prev_state, &value);
- req_str = MC_request_to_string(prev_req, value);
- XBT_DEBUG("%s (state=%p)", req_str, prev_state);
- xbt_free(req_str);
- prev_req = MC_state_get_executed_request(state, &value);
- req_str = MC_request_to_string(prev_req, value);
- XBT_DEBUG("%s (state=%p)", req_str, state);
- xbt_free(req_str);
+ if(mc_reduce_kind != e_mc_reduce_none){
+ req = MC_state_get_internal_request(state);
+ /* If max_depth reached, check only for the last state if the request that has generated
+ it, depends on any other processes still enabled when max_depth reached */
+ if(xbt_fifo_size(mc_stack_safety) == _sg_mc_max_depth - 1){
+ req3 = *req;
+ xbt_swag_foreach(process, simix_global->process_list){
+ if(MC_process_is_enabled(process) && !MC_state_process_is_done(state, process)){
+ MC_state_interleave_process(state, process);
+ req2 = MC_state_get_request(state, &value2);
+ MC_state_set_executed_request(state, req2, value2);
+ req2 = MC_state_get_internal_request(state);
+ if(MC_request_depend(&req3, req2)){
+ if(XBT_LOG_ISENABLED(mc_dpor, xbt_log_priority_debug)){
+ XBT_DEBUG("Dependent Transitions:");
+ req_str = MC_request_to_string(&req3, value);
+ XBT_DEBUG("%s (state=%p)", req_str, state);
+ xbt_free(req_str);
+ req_str = MC_request_to_string(req2, value);
+ XBT_DEBUG("%s (state=%p)", req_str, state);
+ xbt_free(req_str);
+ }
+ MC_state_interleave_process(state, process);
+ break;
+ }
+ }