run.sh: don't touch my run script subramanian
[model-checker.git] / model.cc
index 142e862c0cbfd898a01d638eb9b4dbec9976bc68..e068a089c162a292ba141351df5e217f26ab65bb 100644 (file)
--- a/model.cc
+++ b/model.cc
@@ -4,6 +4,8 @@
 #include "action.h"
 #include "tree.h"
 #include "schedule.h"
+#include "snapshot-interface.h"
+#undef DEBUG
 #include "common.h"
 
 #define INITIAL_THREAD_ID      0
@@ -58,7 +60,7 @@ ModelChecker::ModelChecker()
 
 ModelChecker::~ModelChecker()
 {
-       std::map<int, class Thread *>::iterator it;
+       std::map<int, class Thread *, std::less< int >, MyAlloc< std::pair< int, class Thread * > > >::iterator it;
        for (it = thread_map.begin(); it != thread_map.end(); it++)
                delete (*it).second;
        thread_map.clear();
@@ -72,7 +74,7 @@ ModelChecker::~ModelChecker()
 void ModelChecker::reset_to_initial_state()
 {
        DEBUG("+++ Resetting to initial state +++\n");
-       std::map<int, class Thread *>::iterator it;
+       std::map<int, class Thread *, std::less< int >, MyAlloc< std::pair< int, class Thread * > > >::iterator it;
        for (it = thread_map.begin(); it != thread_map.end(); it++)
                delete (*it).second;
        thread_map.clear();
@@ -81,6 +83,7 @@ void ModelChecker::reset_to_initial_state()
        current_action = NULL;
        next_thread_id = INITIAL_THREAD_ID;
        used_sequence_numbers = 0;
+       nextThread = 0;
        /* scheduler reset ? */
 }
 
@@ -118,6 +121,15 @@ thread_id_t ModelChecker::get_next_replay_thread()
        ModelAction *next;
        thread_id_t tid;
 
+       /* Have we completed exploring the preselected path? */
+       if (exploring == NULL)
+               return THREAD_ID_T_NONE;
+
+       /* Else, we are trying to replay an execution */
+       exploring->advance_state();
+
+       ASSERT(exploring->get_state() != NULL);
+
        next = exploring->get_state();
 
        if (next == exploring->get_diverge()) {
@@ -135,20 +147,6 @@ thread_id_t ModelChecker::get_next_replay_thread()
        return tid;
 }
 
-thread_id_t ModelChecker::advance_backtracking_state()
-{
-       /* Have we completed exploring the preselected path? */
-       if (exploring == NULL)
-               return THREAD_ID_T_NONE;
-
-       /* Else, we are trying to replay an execution */
-       exploring->advance_state();
-
-       ASSERT(exploring->get_state() != NULL);
-
-       return get_next_replay_thread();
-}
-
 bool ModelChecker::next_execution()
 {
        DBG();
@@ -165,7 +163,6 @@ bool ModelChecker::next_execution()
        }
 
        model->reset_to_initial_state();
-       nextThread = get_next_replay_thread();
        return true;
 }
 
@@ -238,18 +235,18 @@ Backtrack * ModelChecker::get_next_backtrack()
 
 void ModelChecker::check_current_action(void)
 {
-       ModelAction *next = this->current_action;
-
-       if (!next) {
+       ModelAction *curr = this->current_action;
+       current_action = NULL;
+       if (!curr) {
                DEBUG("trying to push NULL action...\n");
                return;
        }
-       current_action = NULL;
-       nextThread = advance_backtracking_state();
-       next->set_node(currentNode);
-       set_backtracking(next);
-       currentNode = currentNode->explore_child(next);
-       this->action_trace->push_back(next);
+
+       nextThread = get_next_replay_thread();
+       curr->set_node(currentNode);
+       set_backtracking(curr);
+       currentNode = currentNode->explore_child(curr);
+       this->action_trace->push_back(curr);
 }
 
 void ModelChecker::print_summary(void)