X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=model.cc;h=e0c3089e4ec1558e072cd3577b22caa3d3a546e1;hb=63c96bfb56ee71259fcbb4d57a2350424944e28a;hp=55949730f5c2a00428618dd8cfbe8bf65c96747f;hpb=a22d12cff31e5309eb0033324d3dd0258de53cb5;p=model-checker.git diff --git a/model.cc b/model.cc index 5594973..e0c3089 100644 --- a/model.cc +++ b/model.cc @@ -1,6 +1,5 @@ #include #include -#include #include #include @@ -17,8 +16,6 @@ #include "execution.h" #include "bugmessage.h" -#define INITIAL_THREAD_ID 0 - ModelChecker *model; /** @brief Constructor */ @@ -27,10 +24,11 @@ ModelChecker::ModelChecker(struct model_params params) : params(params), scheduler(new Scheduler()), node_stack(new NodeStack()), - execution(new ModelExecution(¶ms, scheduler, node_stack)), + execution(new ModelExecution(this, &this->params, scheduler, node_stack)), + execution_number(1), diverge(NULL), earliest_diverge(NULL), - trace_analyses(new ModelVector()) + trace_analyses() { } @@ -38,9 +36,8 @@ ModelChecker::ModelChecker(struct model_params params) : ModelChecker::~ModelChecker() { delete node_stack; - for (unsigned int i = 0; i < trace_analyses->size(); i++) - delete (*trace_analyses)[i]; - delete trace_analyses; + for (unsigned int i = 0; i < trace_analyses.size(); i++) + delete trace_analyses[i]; delete scheduler; } @@ -321,15 +318,16 @@ bool ModelChecker::next_execution() diverge->print(); } - execution->increment_execution_number(); + execution_number++; + reset_to_initial_state(); return true; } /** @brief Run trace analyses on complete trace */ void ModelChecker::run_trace_analyses() { - for (unsigned int i = 0; i < trace_analyses->size(); i++) - (*trace_analyses)[i]->analyze(execution->get_action_trace()); + for (unsigned int i = 0; i < trace_analyses.size(); i++) + trace_analyses[i]->analyze(execution->get_action_trace()); } /** @@ -436,7 +434,7 @@ void ModelChecker::run() { do { thrd_t user_thread; - Thread *t = new Thread(&user_thread, &user_main_wrapper, NULL, NULL); + Thread *t = new Thread(execution->get_next_id(), &user_thread, &user_main_wrapper, NULL, NULL); execution->add_thread(t); do { @@ -446,7 +444,7 @@ void ModelChecker::run() * thread which just took a step--plus the first step * for any newly-created thread */ - for (unsigned int i = 0; i < execution->get_num_threads(); i++) { + for (unsigned int i = 0; i < get_num_threads(); i++) { thread_id_t tid = int_to_id(i); Thread *thr = get_thread(tid); if (!thr->is_model_thread() && !thr->is_complete() && !thr->get_pending()) {