- }
- MC_UNSET_RAW_MEM;
-
- /* FIXME: Update Statistics
- mc_stats->state_size +=
- xbt_setset_set_size(next_state->enabled_transitions);*/
-
- /* Let's loop again */
-
- /* The interleave set is empty or the maximum depth is reached, let's back-track */
- } else {
- XBT_DEBUG("There are no more processes to interleave.");
-
- /* Trash the current state, no longer needed */
- MC_SET_RAW_MEM;
- xbt_fifo_shift(mc_stack);
- MC_state_delete(state);
- MC_UNSET_RAW_MEM;
-
- /* Check for deadlocks */
- if(MC_deadlock_check()){
- MC_show_deadlock(NULL);
- return;
- }
-
- MC_SET_RAW_MEM;
- /* Traverse the stack backwards until a state with a non empty interleave
- set is found, deleting all the states that have it empty in the way.
- For each deleted state, check if the request that has generated it
- (from it's predecesor state), depends on any other previous request
- executed before it. If it does then add it to the interleave set of the
- state that executed that previous request. */
- while ((state = xbt_fifo_shift(mc_stack)) != NULL) {
- req = MC_state_get_internal_request(state);
- xbt_fifo_foreach(mc_stack, 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_state_process_is_done(prev_state, req->issuer))
- MC_state_interleave_process(prev_state, req->issuer);
- else
- XBT_DEBUG("Process %p is in done set", req->issuer);
-