X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=history.cc;h=d5179332a36e8e489a73b5248921d8535cd74a01;hp=6f9fdad4ea7b6b1e3ec06d78261c0e6a0a3604cc;hb=fbed9b2aaf6ac4f928a59dd0dd885348dcb0eb4c;hpb=805cb1992146bc8f5d69e3e98a4b2f941a407001 diff --git a/history.cc b/history.cc index 6f9fdad4..d5179332 100644 --- a/history.cc +++ b/history.cc @@ -79,7 +79,7 @@ void ModelHistory::enter_function(const uint32_t func_id, thread_id_t tid) } /* Monitor the statuses of threads waiting for tid */ - monitor_waiting_thread(func_id, tid); + // monitor_waiting_thread(func_id, tid); } /* @param func_id a non-zero value */ @@ -146,7 +146,7 @@ void ModelHistory::process_action(ModelAction *act, thread_id_t tid) return; /* Monitor the statuses of threads waiting for tid */ - monitor_waiting_thread_counter(tid); + // monitor_waiting_thread_counter(tid); /* Every write action should be processed, including * nonatomic writes (which have no position) */ @@ -181,7 +181,16 @@ void ModelHistory::process_action(ModelAction *act, thread_id_t tid) return; /* Add to curr_inst_list */ - curr_act_list->push_back(act); + act->setFuncActRef(curr_act_list->add_back(act)); + if (act->is_read()) { + ModelAction * rf = act->get_reads_from(); + void * func_act_ref = rf->getFuncActRef(); + if (func_act_ref == WRITE_REFERENCED) { + // do nothing + } else if (func_act_ref == NULL) { + rf->setFuncActRef(WRITE_REFERENCED); + } + } FuncNode * func_node = func_nodes[func_id]; func_node->add_inst(act); @@ -190,7 +199,7 @@ void ModelHistory::process_action(ModelAction *act, thread_id_t tid) func_node->update_inst_act_map(tid, act); Fuzzer * fuzzer = model->get_execution()->getFuzzer(); - Predicate * selected_branch = fuzzer->get_selected_child_branch(tid); + Predicate * selected_branch = ((NewFuzzer *)fuzzer)->get_selected_child_branch(tid); func_node->set_predicate_tree_position(tid, selected_branch); } @@ -363,7 +372,7 @@ void ModelHistory::check_waiting_write(ModelAction * write_act) Thread * thread = model->get_thread(tid); //model_print("** thread %d is woken up\n", thread->get_id()); - model->get_execution()->getFuzzer()->notify_paused_thread(thread); + ((NewFuzzer *)model->get_execution()->getFuzzer())->notify_paused_thread(thread); } index++; @@ -431,7 +440,7 @@ void ModelHistory::stop_waiting_for_node(thread_id_t self_id, // model_print("\tthread %d waits for nobody, wake up\n", self_id); ModelExecution * execution = model->get_execution(); Thread * thread = execution->get_thread(self_id); - execution->getFuzzer()->notify_paused_thread(thread); + ((NewFuzzer *)execution->getFuzzer())->notify_paused_thread(thread); } } } @@ -533,7 +542,7 @@ void ModelHistory::monitor_waiting_thread_counter(thread_id_t tid) // model_print("\tthread %d waits for nobody, wake up\n", self_id); ModelExecution * execution = model->get_execution(); Thread * thread = execution->get_thread(waited_by_id); - execution->getFuzzer()->notify_paused_thread(thread); + ((NewFuzzer *)execution->getFuzzer())->notify_paused_thread(thread); } } }