X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=model.h;h=6f082c66a71653f7240fcf8102223f60845e870f;hb=c1cc5e279bcba4216bde88a63dafac96d3ef47ba;hp=47f5139ba1b82ebe63c804b32945bffd31325bd0;hpb=f71cd7c31df98cfc814254da887de9a30c53b31e;p=model-checker.git diff --git a/model.h b/model.h index 47f5139..6f082c6 100644 --- a/model.h +++ b/model.h @@ -18,6 +18,7 @@ #include "clockvector.h" #include "hashtable.h" #include "workqueue.h" +#include "config.h" /* Forward declaration */ class NodeStack; @@ -34,6 +35,8 @@ typedef std::vector< const ModelAction *, MyAlloc > rel_hea struct model_params { int maxreads; int maxfuturedelay; + unsigned int fairwindow; + unsigned int enabledcount; }; struct PendingFutureValue { @@ -64,6 +67,9 @@ public: /** Prints an execution summary with trace information. */ void print_summary(); +#if SUPPORT_MOD_ORDER_DUMP + void dumpGraph(char *filename); +#endif void add_thread(Thread *t); void remove_thread(Thread *t); @@ -90,6 +96,12 @@ public: bool isfeasibleprefix(); void set_assert() {asserted=true;} + /** @brief Alert the model-checker that an incorrectly-ordered + * synchronization was made */ + void set_bad_synchronization() { bad_synchronization = true; } + + const model_params params; + MEMALLOC private: /** The scheduler to use: tracks the running/ready Threads */ @@ -101,7 +113,6 @@ private: int num_executions; int num_feasible_executions; bool promises_expired(); - const model_params params; /** * Stores the ModelAction for the current thread action. Call this @@ -114,12 +125,13 @@ private: ModelAction * initialize_curr_action(ModelAction *curr); bool process_read(ModelAction *curr, bool second_part_of_rmw); bool process_write(ModelAction *curr); - void process_mutex(ModelAction *curr); + bool process_mutex(ModelAction *curr); + bool process_thread_action(ModelAction *curr); bool check_action_enabled(ModelAction *curr); bool take_step(); - void check_recency(ModelAction *curr); + void check_recency(ModelAction *curr, const ModelAction *rf); ModelAction * get_last_conflict(ModelAction *act); void set_backtracking(ModelAction *act); Thread * get_next_thread(ModelAction *curr); @@ -143,6 +155,7 @@ private: void do_complete_join(ModelAction *join); ModelAction *diverge; + ModelAction *earliest_diverge; ucontext_t system_context; action_list_t *action_trace; @@ -193,6 +206,8 @@ private: bool failed_promise; bool too_many_reads; bool asserted; + /** @brief Incorrectly-ordered synchronization was made */ + bool bad_synchronization; }; extern ModelChecker *model;