end = cursor - 1;
if(chunks_used_test == current_chunks_used){
same_chunks_not_found = 0;
- if(snapshot_compare(new_state->system_state, state_test->system_state, NULL, NULL) == 0){
+ if(snapshot_compare(new_state->system_state, state_test->system_state) == 0){
xbt_dynar_remove_at(visited_states, cursor, NULL);
xbt_dynar_insert_at(visited_states, cursor, &new_state);
if(raw_mem_set)
chunks_used_test = state_test->system_state->heap_chunks_used;
if(chunks_used_test != current_chunks_used)
break;
- if(snapshot_compare(new_state->system_state, state_test->system_state, NULL, NULL) == 0){
+ if(snapshot_compare(new_state->system_state, state_test->system_state) == 0){
xbt_dynar_remove_at(visited_states, previous_cursor, NULL);
xbt_dynar_insert_at(visited_states, previous_cursor, &new_state);
if(raw_mem_set)
chunks_used_test = state_test->system_state->heap_chunks_used;
if(chunks_used_test != current_chunks_used)
break;
- if(snapshot_compare(new_state->system_state, state_test->system_state, NULL, NULL) == 0){
+ if(snapshot_compare(new_state->system_state, state_test->system_state) == 0){
xbt_dynar_remove_at(visited_states, next_cursor, NULL);
xbt_dynar_insert_at(visited_states, next_cursor, &new_state);
if(raw_mem_set)
{
char *req_str;
- int value;
- smx_simcall_t req = NULL, prev_req = NULL;
- s_smx_simcall_t req2;
+ int value, value2;
+ smx_simcall_t req = NULL, prev_req = NULL, req2 = NULL;
+ s_smx_simcall_t req3;
mc_state_t state = NULL, prev_state = NULL, next_state = NULL, restore_state=NULL;
smx_process_t process = NULL;
xbt_fifo_item_t item = NULL;
- int pos, i;
+ int pos, i, interleave_size;
int interleave_proc[simix_process_maxpid];
while (xbt_fifo_size(mc_stack_safety) > 0) {
MC_state_set_executed_request(state, req, value);
mc_stats->executed_transitions++;
+ if(MC_state_interleave_size(state)){
+ MC_SET_RAW_MEM;
+ req2 = MC_state_get_internal_request(state);
+ req3 = *req2;
+ for(i=0; i<simix_process_maxpid; i++)
+ interleave_proc[i] = 0;
+ i=0;
+ interleave_size = MC_state_interleave_size(state);
+ while(i < interleave_size){
+ i++;
+ prev_req = MC_state_get_request(state, &value2);
+ if(prev_req != NULL){
+ MC_state_set_executed_request(state, prev_req, value2);
+ prev_req = MC_state_get_internal_request(state);
+ if(MC_request_depend(&req3, prev_req)){
+ XBT_DEBUG("Simcall %d in process %lu dependant with simcall %d in process %lu", req3.call, req3.issuer->pid, prev_req->call, prev_req->issuer->pid);
+ interleave_proc[prev_req->issuer->pid] = 1;
+ }else{
+ XBT_DEBUG("Simcall %d in process %lu independant with simcall %d in process %lu", req3.call, req3.issuer->pid, prev_req->call, prev_req->issuer->pid);
+ MC_state_remove_interleave_process(state, prev_req->issuer);
+ }
+ }
+ }
+ xbt_swag_foreach(process, simix_global->process_list){
+ if(interleave_proc[process->pid] == 1)
+ MC_state_interleave_process(state, process);
+ }
+ MC_UNSET_RAW_MEM;
+ }
+
+ MC_state_set_executed_request(state, req, value);
+
/* Answer the request */
SIMIX_simcall_pre(req, value); /* After this call req is no longer usefull */
MC_UNSET_RAW_MEM;
MC_replay(mc_stack_safety, -1);
}
-
- MC_SET_RAW_MEM;
- req2 = *req;
- for(i=0; i<simix_process_maxpid; i++)
- interleave_proc[i] = 0;
- i=0;
- while((i < MC_state_interleave_size(state))){
- i++;
- prev_req = MC_state_get_request(state, &value);
- if(prev_req != NULL){
- MC_state_set_executed_request(state, prev_req, value);
- prev_req = MC_state_get_internal_request(state);
- if(MC_request_depend(&req2, prev_req)){
- XBT_DEBUG("Simcall %d in process %lu dependant with simcall %d in process %lu", req2.call, req2.issuer->pid, prev_req->call, prev_req->issuer->pid);
- interleave_proc[prev_req->issuer->pid] = 1;
- }else{
- XBT_DEBUG("Simcall %d in process %lu independant with simcall %d in process %lu", req2.call, req2.issuer->pid, prev_req->call, prev_req->issuer->pid);
- MC_state_remove_interleave_process(state, prev_req->issuer);
- }
- }
- }
- xbt_swag_foreach(process, simix_global->process_list){
- if(interleave_proc[process->pid] == 1)
- MC_state_interleave_process(state, process);
- }
XBT_DEBUG("Back-tracking to depth %d", xbt_fifo_size(mc_stack_safety));
- MC_UNSET_RAW_MEM;
break;
} else {
MC_state_delete(state);