edits
authorroot <root@dw-6.eecs.uci.edu>
Tue, 30 Jul 2019 21:19:46 +0000 (14:19 -0700)
committerroot <root@dw-6.eecs.uci.edu>
Tue, 30 Jul 2019 21:19:46 +0000 (14:19 -0700)
execution.cc
execution.h
fuzzer.cc

index 679a3d1b9489a577be03ee1a0370c3dd9ab21ba2..5668fc36d27c643b3db137b7f9502d1e4cfdf5db 100644 (file)
@@ -1158,38 +1158,36 @@ void ModelExecution::add_action_to_lists(ModelAction *act)
 }
 
 void insertIntoActionList(action_list_t *list, ModelAction *act) {
-       action_list_t::reverse_iterator rit = list->rbegin();
+  sllnode<ModelAction*> * rit = list->end();
        modelclock_t next_seq = act->get_seq_number();
-       if (rit == list->rend() || (*rit)->get_seq_number() == next_seq)
-               list->push_back(act);
+       if (rit == NULL || (rit->getVal())->get_seq_number() == next_seq)
+         list->push_back(act);
        else {
-               for(;rit != list->rend();rit++) {
-                       if ((*rit)->get_seq_number() == next_seq) {
-                               action_list_t::iterator it = rit.base();
-                               list->insert(it, act);
-                               break;
-                       }
-               }
+         for(;rit != NULL;rit=rit->getPrev()) {
+           if ((rit->getVal())->get_seq_number() == next_seq) {
+             list->insertAfter(rit, act);
+             break;
+           }
+         }
        }
 }
 
 void insertIntoActionListAndSetCV(action_list_t *list, ModelAction *act) {
-       action_list_t::reverse_iterator rit = list->rbegin();
+  sllnode<ModelAction*> * rit = list->end();
        modelclock_t next_seq = act->get_seq_number();
-       if (rit == list->rend()) {
+       if (rit == NULL) {
                act->create_cv(NULL);
-       } else if ((*rit)->get_seq_number() == next_seq) {
-               act->create_cv((*rit));
-               list->push_back(act);
+       } else if (rit->getVal()->get_seq_number() == next_seq) {
+         act->create_cv(rit->getVal());
+         list->push_back(act);
        } else {
-               for(;rit != list->rend();rit++) {
-                       if ((*rit)->get_seq_number() == next_seq) {
-                               act->create_cv((*rit));
-                               action_list_t::iterator it = rit.base();
-                               list->insert(it, act);
-                               break;
-                       }
-               }
+         for(;rit != NULL;rit=rit->getPrev()) {
+           if (rit->getVal()->get_seq_number() == next_seq) {
+             act->create_cv(rit->getVal());
+             list->insertAfter(rit, act);
+             break;
+           }
+         }
        }
 }
 
@@ -1295,20 +1293,22 @@ ModelAction * ModelExecution::get_last_seq_cst_fence(thread_id_t tid, const Mode
        if (!list)
                return NULL;
 
-       action_list_t::reverse_iterator rit = list->rbegin();
+       sllnode<ModelAction*>* rit = list->end();
 
        if (before_fence) {
-               for (;rit != list->rend();rit++)
-                       if (*rit == before_fence)
-                               break;
-
-               ASSERT(*rit == before_fence);
-               rit++;
+         for (;rit != NULL;rit=rit->getPrev())
+           if (rit->getVal() == before_fence)
+             break;
+         
+         ASSERT(rit->getVal() == before_fence);
+         rit=rit->getPrev();
        }
 
-       for (;rit != list->rend();rit++)
-               if ((*rit)->is_fence() && (tid == (*rit)->get_tid()) && (*rit)->is_seqcst())
-                       return *rit;
+       for (;rit != NULL;rit=rit->getPrev()) {
+         ModelAction *act = rit->getVal();
+         if (act->is_fence() && (tid == act->get_tid()) && act->is_seqcst())
+                       return act;
+       }
        return NULL;
 }
 
@@ -1326,10 +1326,10 @@ ModelAction * ModelExecution::get_last_unlock(ModelAction *curr) const
 
        action_list_t *list = obj_map.get(location);
        /* Find: max({i in dom(S) | isUnlock(t_i) && samevar(t_i, t)}) */
-       action_list_t::reverse_iterator rit;
-       for (rit = list->rbegin();rit != list->rend();rit++)
-               if ((*rit)->is_unlock() || (*rit)->is_wait())
-                       return *rit;
+       sllnode<ModelAction*>* rit;
+       for (rit = list->end();rit != NULL;rit=rit->getPrev())
+         if (rit->getVal()->is_unlock() || rit->getVal()->is_wait())
+           return rit->getVal();
        return NULL;
 }
 
@@ -1392,9 +1392,9 @@ SnapVector<ModelAction *> *  ModelExecution::build_may_read_from(ModelAction *cu
        for (i = 0;i < thrd_lists->size();i++) {
                /* Iterate over actions in thread, starting from most recent */
                action_list_t *list = &(*thrd_lists)[i];
-               action_list_t::reverse_iterator rit;
-               for (rit = list->rbegin();rit != list->rend();rit++) {
-                       ModelAction *act = *rit;
+               sllnode<ModelAction *> * rit;
+               for (rit = list->end();rit != NULL;rit=rit->getPrev()) {
+                 ModelAction *act = rit->getVal();
 
                        if (act == curr)
                                continue;
@@ -1457,9 +1457,9 @@ ModelAction * ModelExecution::get_uninitialized_action(ModelAction *curr) const
        return act;
 }
 
-static void print_list(const action_list_t *list)
+static void print_list(action_list_t *list)
 {
-       action_list_t::const_iterator it;
+  sllnode<ModelAction*> *it;
 
        model_print("------------------------------------------------------------------------------------\n");
        model_print("#    t    Action type     MO       Location         Value               Rf  CV\n");
@@ -1467,18 +1467,18 @@ static void print_list(const action_list_t *list)
 
        unsigned int hash = 0;
 
-       for (it = list->begin();it != list->end();it++) {
-               const ModelAction *act = *it;
+       for (it = list->begin();it != NULL;it=it->getNext()) {
+         const ModelAction *act = it->getVal();
                if (act->get_seq_number() > 0)
                        act->print();
-               hash = hash^(hash<<3)^((*it)->hash());
+               hash = hash^(hash<<3)^(it->getVal()->hash());
        }
        model_print("HASH %u\n", hash);
        model_print("------------------------------------------------------------------------------------\n");
 }
 
 #if SUPPORT_MOD_ORDER_DUMP
-void ModelExecution::dumpGraph(char *filename) const
+void ModelExecution::dumpGraph(char *filename)
 {
        char buffer[200];
        sprintf(buffer, "%s.dot", filename);
@@ -1487,8 +1487,8 @@ void ModelExecution::dumpGraph(char *filename) const
        mo_graph->dumpNodes(file);
        ModelAction **thread_array = (ModelAction **)model_calloc(1, sizeof(ModelAction *) * get_num_threads());
 
-       for (action_list_t::const_iterator it = action_trace.begin();it != action_trace.end();it++) {
-               ModelAction *act = *it;
+       for (sllnode<ModelAction*>* it = action_trace.begin();it != NULL;it=it->getNext()) {
+         ModelAction *act = it->getVal();
                if (act->is_read()) {
                        mo_graph->dot_print_node(file, act);
                        mo_graph->dot_print_edge(file,
@@ -1512,7 +1512,7 @@ void ModelExecution::dumpGraph(char *filename) const
 #endif
 
 /** @brief Prints an execution trace summary. */
-void ModelExecution::print_summary() const
+void ModelExecution::print_summary() 
 {
 #if SUPPORT_MOD_ORDER_DUMP
        char buffername[100];
index 5a6c40ac1a61d5a5ce8d013987a79b2f908c87aa..22f694c9c193951dd9cc2405c834c298e7fee40d 100644 (file)
@@ -40,9 +40,9 @@ public:
 
        Thread * take_step(ModelAction *curr);
 
-       void print_summary() const;
+       void print_summary();
 #if SUPPORT_MOD_ORDER_DUMP
-       void dumpGraph(char *filename) const;
+       void dumpGraph(char *filename);
 #endif
 
        void add_thread(Thread *t);
index 5b174b15f847b1df433178d600758e3be93b30f8..fff0c1e21be8334426f60a15c40e55f2f6a7142b 100644 (file)
--- a/fuzzer.cc
+++ b/fuzzer.cc
@@ -18,9 +18,10 @@ Thread * Fuzzer::selectThread(int * threadlist, int numthreads) {
 Thread * Fuzzer::selectNotify(action_list_t * waiters) {
        int numwaiters = waiters->size();
        int random_index = random() % numwaiters;
-       action_list_t::iterator it = waiters->begin();
-       advance(it, random_index);
-       Thread *thread = model->get_thread(*it);
+       sllnode<ModelAction*> * it = waiters->begin();
+       while(random_index--)
+         it=it->getNext();
+       Thread *thread = model->get_thread(it->getVal());
        waiters->erase(it);
        return thread;
 }