X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=model.cc;h=f50b0f9a60777557429c33ab7fc4b3236ef1cb6f;hb=fe8423ca853f5d614e618fe49d37d0943d416809;hp=773d723e2a6a0db67f1419c0d7276080002bbf11;hpb=1873837128eca281cb7ccae1ca564af56e1e10b4;p=model-checker.git diff --git a/model.cc b/model.cc index 773d723..f50b0f9 100644 --- a/model.cc +++ b/model.cc @@ -13,6 +13,7 @@ ModelChecker::ModelChecker() /* Initialize default scheduler */ this->scheduler = new Scheduler(); + num_executions = 0; this->current_action = NULL; this->exploring = NULL; this->nextThread = THREAD_ID_T_NONE; @@ -29,9 +30,9 @@ ModelChecker::~ModelChecker() delete rootNode; } -void ModelChecker::assign_id(Thread *t) +int ModelChecker::get_next_id() { - t->set_id(++used_thread_id); + return ++used_thread_id; } void ModelChecker::add_system_thread(Thread *t) @@ -39,7 +40,7 @@ void ModelChecker::add_system_thread(Thread *t) this->system_thread = t; } -Thread *ModelChecker::schedule_next_thread() +Thread * ModelChecker::schedule_next_thread() { Thread *t; if (nextThread == THREAD_ID_T_NONE) @@ -93,7 +94,17 @@ thread_id_t ModelChecker::advance_backtracking_state() return get_next_replay_thread(); } -ModelAction *ModelChecker::get_last_conflict(ModelAction *act) +bool ModelChecker::next_execution() +{ + num_executions++; + if ((exploring = model->get_next_backtrack()) == NULL) + return false; + model->reset_to_initial_state(); + nextThread = get_next_replay_thread(); + return true; +} + +ModelAction * ModelChecker::get_last_conflict(ModelAction *act) { void *loc = act->get_location(); action_type type = act->get_type(); @@ -173,6 +184,7 @@ void ModelChecker::print_trace(void) printf("\n"); printf("---------------------------------------------------------------------\n"); + printf("Number of executions: %d\n", num_executions); printf("Total nodes created: %d\n\n", TreeNode::getTotalNodes()); scheduler->print(); @@ -189,6 +201,7 @@ void ModelChecker::print_trace(void) int ModelChecker::add_thread(Thread *t) { thread_map[t->get_id()] = t; + scheduler->add_thread(t); return 0; }