X-Git-Url: http://plrg.eecs.uci.edu/git/?p=model-checker.git;a=blobdiff_plain;f=nodestack.cc;h=76d167d82a9438e6cd941d114c5a172867ca0780;hp=136e3a2eb4a2f72325db5e95e5fc9205160450b2;hb=59eb730e1d19a0825008c40eb521bfc5c29df5f9;hpb=718fed530a17d55ab479921e8dffebea4f98cbdf diff --git a/nodestack.cc b/nodestack.cc index 136e3a2..76d167d 100644 --- a/nodestack.cc +++ b/nodestack.cc @@ -4,6 +4,7 @@ #include "action.h" #include "common.h" #include "model.h" +#include "threads.h" /** * @brief Node constructor @@ -46,7 +47,7 @@ Node::Node(ModelAction *act, Node *par, int nthreads, Node *prevfairness) if (prevfi) { *fi=*prevfi; } - if (parent->enabled_array[i]) { + if (parent->enabled_array[i]==THREAD_ENABLED) { fi->enabled_count++; } if (i==currtid) { @@ -55,7 +56,7 @@ Node::Node(ModelAction *act, Node *par, int nthreads, Node *prevfairness) } //Do window processing if (prevfairness != NULL) { - if (prevfairness -> parent->enabled_array[i]) + if (prevfairness -> parent->enabled_array[i] == THREAD_ENABLED) fi->enabled_count--; if (i==prevtid) { fi->turns--; @@ -77,7 +78,7 @@ Node::~Node() if (action) delete action; if (enabled_array) - MYFREE(enabled_array); + model_free(enabled_array); } /** Prints debugging info for the ModelAction associated with this Node */ @@ -158,7 +159,7 @@ bool Node::add_future_value(uint64_t value, modelclock_t expiration) { if (future_values[i].value == value) { if (future_values[i].expiration>=expiration) return false; - if (future_index < i) { + if (future_index < ((int) i)) { suitableindex=i; } } @@ -178,7 +179,7 @@ bool Node::add_future_value(uint64_t value, modelclock_t expiration) { * @return true if the future_values set is empty. */ bool Node::future_value_empty() { - return ((future_index + 1) >= future_values.size()); + return ((future_index + 1) >= ((int)future_values.size())); } /** @@ -215,15 +216,15 @@ bool Node::read_from_empty() { * Mark the appropriate backtracking information for exploring a thread choice. * @param act The ModelAction to explore */ -void Node::explore_child(ModelAction *act, bool * is_enabled) +void Node::explore_child(ModelAction *act, enabled_type_t * is_enabled) { if ( ! enabled_array ) - enabled_array=(bool *)MYMALLOC(sizeof(bool)*num_threads); + enabled_array=(enabled_type_t *)model_malloc(sizeof(enabled_type_t)*num_threads); if (is_enabled != NULL) - memcpy(enabled_array, is_enabled, sizeof(bool)*num_threads); + memcpy(enabled_array, is_enabled, sizeof(enabled_type_t)*num_threads); else { for(int i=0;iget_tid()); @@ -264,13 +265,18 @@ thread_id_t Node::get_next_backtrack() bool Node::is_enabled(Thread *t) { int thread_id=id_to_int(t->get_id()); - return thread_id < num_threads && enabled_array[thread_id]; + return thread_id < num_threads && (enabled_array[thread_id] != THREAD_DISABLED); } bool Node::is_enabled(thread_id_t tid) { int thread_id=id_to_int(tid); - return thread_id < num_threads && enabled_array[thread_id]; + return thread_id < num_threads && (enabled_array[thread_id] != THREAD_DISABLED); +} + +bool Node::has_priority(thread_id_t tid) +{ + return fairness[id_to_int(tid)].priority; } /** @@ -288,12 +294,12 @@ void Node::add_read_from(const ModelAction *act) * @return The first element in future_values */ uint64_t Node::get_future_value() { - ASSERT(future_index