class Thread;
class TraceAnalysis;
class Fuzzer;
+class NewFuzzer;
class FuncNode;
class FuncInst;
class Predicate;
#include "bugmessage.h"
#include "history.h"
#include "fuzzer.h"
+#include "newfuzzer.h"
#define INITIAL_THREAD_ID 0
thrd_last_fence_release(),
priv(new struct model_snapshot_members ()),
mo_graph(new CycleGraph()),
- fuzzer(new Fuzzer()),
+ fuzzer(new NewFuzzer()),
thrd_func_list(),
thrd_func_act_lists(),
isfinished(false)
int index = fuzzer->selectWrite(curr, rf_set);
ModelAction *rf = (*rf_set)[index];
-
ASSERT(rf);
bool canprune = false;
if (r_modification_order(curr, rf, priorset, &canprune)) {
class Fuzzer {
public:
Fuzzer() {}
- int selectWrite(ModelAction *read, SnapVector<ModelAction *>* rf_set);
+ virtual int selectWrite(ModelAction *read, SnapVector<ModelAction *>* rf_set);
Thread * selectThread(int * threadlist, int numthreads);
Thread * selectNotify(action_list_t * waiters);
bool shouldSleep(const ModelAction *sleep);
--- /dev/null
+#include "newfuzzer.h"
+#include "threads-model.h"
+#include "model.h"
+#include "action.h"
+
+int NewFuzzer::selectWrite(ModelAction *read, SnapVector<ModelAction *> * rf_set)
+{
+ int random_index = random() % rf_set->size();
+ return random_index;
+}
--- /dev/null
+#ifndef __NEWFUZZER_H__
+#define __NEWFUZZER_H__
+
+#include "fuzzer.h"
+#include "classlist.h"
+#include "mymemory.h"
+#include "stl-model.h"
+
+class NewFuzzer : public Fuzzer {
+public:
+ NewFuzzer() {}
+ int selectWrite(ModelAction *read, SnapVector<ModelAction *>* rf_set);
+ Thread * selectThread(int * threadlist, int numthreads);
+ Thread * selectNotify(action_list_t * waiters);
+ bool shouldSleep(const ModelAction *sleep);
+ bool shouldWake(const ModelAction *sleep);
+ MEMALLOC
+private:
+};
+
+#endif /* end of __NEWFUZZER_H__ */