From b4b72f4f097f4338bd1f4f48c34976781eeb8fb2 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 30 Jul 2019 14:19:46 -0700 Subject: [PATCH] edits --- execution.cc | 98 ++++++++++++++++++++++++++-------------------------- execution.h | 4 +-- fuzzer.cc | 7 ++-- 3 files changed, 55 insertions(+), 54 deletions(-) diff --git a/execution.cc b/execution.cc index 679a3d1b..5668fc36 100644 --- a/execution.cc +++ b/execution.cc @@ -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 * 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 * 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* 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* 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 * 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 * 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 *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* 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]; diff --git a/execution.h b/execution.h index 5a6c40ac..22f694c9 100644 --- a/execution.h +++ b/execution.h @@ -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); diff --git a/fuzzer.cc b/fuzzer.cc index 5b174b15..fff0c1e2 100644 --- 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 * it = waiters->begin(); + while(random_index--) + it=it->getNext(); + Thread *thread = model->get_thread(it->getVal()); waiters->erase(it); return thread; } -- 2.34.1