model: add too_many_steps()
[model-checker.git] / model.cc
index 0f2f0366ebf136f448965c2d5449e317b199ca30..eed548cc0c906b0d50b6c78f89e51e15aa4b4e1b 100644 (file)
--- a/model.cc
+++ b/model.cc
@@ -123,7 +123,7 @@ ModelChecker::~ModelChecker()
        delete thrd_last_action;
        delete thrd_last_fence_release;
        delete node_stack;
-       for (unsigned int i = 0; i <trace_analyses->size();i++)
+       for (unsigned int i = 0; i < trace_analyses->size(); i++)
                delete (*trace_analyses)[i];
        delete trace_analyses;
        delete scheduler;
@@ -151,6 +151,18 @@ static SnapVector<action_list_t> * get_safe_ptr_vect_action(HashTable<void *, Sn
        return tmp;
 }
 
+action_list_t * ModelChecker::get_actions_on_obj(void * obj, thread_id_t tid) {
+       SnapVector<action_list_t> *wrv=obj_thrd_map->get(obj);
+       if (wrv==NULL)
+               return NULL;
+       unsigned int thread=id_to_int(tid);
+       if (thread < wrv->size())
+               return &(*wrv)[thread];
+       else
+               return NULL;
+}
+
+
 /**
  * Restores user program to initial state and resets all model-checker data
  * structures.
@@ -584,13 +596,10 @@ bool ModelChecker::next_execution()
        return true;
 }
 
-/**
- * @brief Run trace analyses on complete trace. */
-
+/** @brief Run trace analyses on complete trace */
 void ModelChecker::run_trace_analyses() {
-       for(unsigned int i=0; i < trace_analyses->size(); i++) {
+       for (unsigned int i = 0; i < trace_analyses->size(); i++)
                (*trace_analyses)[i]->analyze(action_trace);
-       }
 }
 
 /**
@@ -3104,6 +3113,12 @@ void user_main_wrapper(void *)
        user_main(model->params.argc, model->params.argv);
 }
 
+/** @return True if the execution has taken too many steps */
+bool ModelChecker::too_many_steps() const
+{
+       return params.bound != 0 && priv->used_sequence_numbers > params.bound;
+}
+
 bool ModelChecker::should_terminate_execution()
 {
        /* Infeasible -> don't take any more steps */
@@ -3114,7 +3129,7 @@ bool ModelChecker::should_terminate_execution()
                return true;
        }
 
-       if (params.bound != 0 && priv->used_sequence_numbers > params.bound)
+       if (too_many_steps())
                return true;
        return false;
 }