X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=model.h;h=7e651561a79740af75910d2f7fd1251691644b49;hp=74cb4e1f29aaf2c649fce027fc9dd10c714eb562;hb=e4b59e52989269c529e94bea1cd1b9dfe418a0ce;hpb=37add7f58b9494dff8f16ef8eb858194d46d1b37 diff --git a/model.h b/model.h index 74cb4e1f..7e651561 100644 --- a/model.h +++ b/model.h @@ -16,6 +16,9 @@ #include "context.h" #include "params.h" +#include +#include + /* Forward declaration */ class Node; class NodeStack; @@ -47,6 +50,15 @@ public: void run(); + /** Restart the model checker, intended for pluggins. */ + void restart(); + + /** Exit the model checker, intended for pluggins. */ + void exit_model_checker(); + + /** Check the exit_flag. */ + bool get_exit_flag() const { return exit_flag; } + /** @returns the context for the main model-checking system thread */ ucontext_t * get_system_context() { return &system_context; } @@ -66,12 +78,17 @@ public: void assert_user_bug(const char *msg); const model_params params; - void add_trace_analysis(TraceAnalysis *a) { - trace_analyses.push_back(a); - } - + void add_trace_analysis(TraceAnalysis *a) { trace_analyses.push_back(a); } + void set_inspect_plugin(TraceAnalysis *a) { inspect_plugin=a; } MEMALLOC + std::map pthread_map; + std::map mutex_map; private: + /** Flag indicates whether to restart the model checker. */ + bool restart_flag; + /** Flag indicates whether to exit the model checker. */ + bool exit_flag; + /** The scheduler to use: tracks the running/ready Threads */ Scheduler * const scheduler; NodeStack * const node_stack; @@ -97,6 +114,10 @@ private: ModelVector trace_analyses; + /** @bref Implement restart. */ + void do_restart(); + /** @bref Plugin that can inspect new actions. */ + TraceAnalysis *inspect_plugin; /** @brief The cumulative execution stats */ struct execution_stats stats; void record_stats();