X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=fuzzer.cc;h=e102d9c34431a13dea089d9437857640e2691cfd;hb=251ac4b4bf3a9f2d3cfacc1e6618200ca1c431ac;hp=3a3f98831b1c64245a5ab85569667e604878b361;hpb=5e7a1a00c4645f90d860274e2f25c33992c2ad86;p=c11tester.git diff --git a/fuzzer.cc b/fuzzer.cc index 3a3f9883..e102d9c3 100644 --- a/fuzzer.cc +++ b/fuzzer.cc @@ -2,25 +2,44 @@ #include #include "threads-model.h" #include "model.h" +#include "action.h" -int Fuzzer::selectWrite(ModelAction *read, SnapVector * rf_set) { +int Fuzzer::selectWrite(ModelAction *read, SnapVector * rf_set) { int random_index = random() % rf_set->size(); return random_index; } -Thread * Fuzzer::selectThread(Node *n, int * threadlist, int numthreads) { +Thread * Fuzzer::selectThread(int * threadlist, int numthreads) { int random_index = random() % numthreads; int thread = threadlist[random_index]; thread_id_t curr_tid = int_to_id(thread); return model->get_thread(curr_tid); } -Thread * Fuzzer::selectNotify(action_list_t * waiters) { +Thread * Fuzzer::selectNotify(simple_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; } + +bool Fuzzer::shouldSleep(const ModelAction *sleep) { + return true; +} + +bool Fuzzer::shouldWake(const ModelAction *sleep) { + struct timespec currtime; + clock_gettime(CLOCK_MONOTONIC, &currtime); + uint64_t lcurrtime = currtime.tv_sec * 1000000000 + currtime.tv_nsec; + + return ((sleep->get_time()+sleep->get_value()) < lcurrtime); +} + +bool Fuzzer::shouldWait(const ModelAction * act) +{ + return true; +}