more bug fixes
[c11tester.git] / actionlist.cc
index 9f335e900e2de1910bf7e1a75531b04a64cb56a7..e76f5aedf8b899e9124d6c6ceeca798196ac726a 100644 (file)
@@ -5,11 +5,11 @@
 #include <limits.h>
 
 actionlist::actionlist() :
-  head(NULL),
-  tail(NULL),
-  _size(0)
+       head(NULL),
+       tail(NULL),
+       _size(0)
 {
-  root.parent = NULL;
+       root.parent = NULL;
 }
 
 actionlist::~actionlist() {
@@ -48,7 +48,7 @@ sllnode<ModelAction *> * allnode::findPrev(modelclock_t index) {
                        } else {
                                //found non-null...
                                if (totalshift == 0)
-                                 return reinterpret_cast<sllnode<ModelAction *> *>(((uintptr_t)ptr->children[currindex])& ACTMASK);
+                                       return reinterpret_cast<sllnode<ModelAction *> *>(((uintptr_t)ptr->children[currindex])& ACTMASK);
                                //need to increment here...
                                ptr = ptr->children[currindex];
                                increment = increment >> ALLBITS;
@@ -104,19 +104,16 @@ void actionlist::addAction(ModelAction * act) {
                        sllnode<ModelAction *> * llnode = new sllnode<ModelAction *>();
                        llnode->val = act;
                        if (tmp == NULL) {
-                               ptr->children[index] = reinterpret_cast<allnode *>(((uintptr_t) llnode) | ISACT);
                                sllnode<ModelAction *> * llnodeprev = ptr->findPrev(clock);
                                if (llnodeprev != NULL) {
-
                                        llnode->next = llnodeprev->next;
                                        llnode->prev = llnodeprev;
 
                                        //see if we are the new tail
-                                       if (llnodeprev->next == NULL)
-                                               tail = llnode;
-                                       else
+                                       if (llnode->next != NULL)
                                                llnode->next->prev = llnode;
-
+                                       else
+                                               tail = llnode;
                                        llnodeprev->next = llnode;
                                } else {
                                        //We are the begining
@@ -131,16 +128,20 @@ void actionlist::addAction(ModelAction * act) {
 
                                        head = llnode;
                                }
+                               ptr->children[index] = reinterpret_cast<allnode *>(((uintptr_t) llnode) | ISACT);
+
                                //need to find next link
                                ptr->count++;
                        } else {
                                //handle case where something else is here
 
-                               sllnode<ModelAction *> * llnodeprev = reinterpret_cast<sllnode<ModelAction *>*>(((uintptr_t) llnode) & ACTMASK);
+                               sllnode<ModelAction *> * llnodeprev = reinterpret_cast<sllnode<ModelAction *>*>(((uintptr_t) tmp) & ACTMASK);
                                llnode->next = llnodeprev->next;
                                llnode->prev = llnodeprev;
                                if (llnode->next != NULL)
-                                 llnode->next->prev = llnode;
+                                       llnode->next->prev = llnode;
+                               else
+                                       tail = llnode;
                                llnodeprev->next = llnode;
                                ptr->children[index] = reinterpret_cast<allnode *>(((uintptr_t) llnode) | ISACT);
                        }
@@ -167,8 +168,8 @@ void decrementCount(allnode * ptr) {
                                        decrementCount(ptr->parent);
                                }
                        }
+                       delete ptr;
                }
-               delete ptr;
        }
 }
 
@@ -203,7 +204,7 @@ void actionlist::removeAction(ModelAction * act) {
                                                }
                                                if (first) {
                                                        //see if previous node has same clock as us...
-                                                       if (llnodeprev->val->get_seq_number() == clock) {
+                                                       if (llnodeprev != NULL && llnodeprev->val->get_seq_number() == clock) {
                                                                ptr->children[index] = reinterpret_cast<allnode *>(((uintptr_t)llnodeprev) | ISACT);
                                                        } else {
                                                                //remove ourselves and go up tree