X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=model.h;h=6f082c66a71653f7240fcf8102223f60845e870f;hb=c1cc5e279bcba4216bde88a63dafac96d3ef47ba;hp=fa11cb8cbbf5f0e5ed3f3ffa727b6ac9aea8ce66;hpb=20d006a8c581117c6636e835cdbe36dac5d6ef93;p=model-checker.git diff --git a/model.h b/model.h index fa11cb8..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; @@ -66,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); @@ -91,6 +95,11 @@ public: void finish_execution(); 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 @@ -116,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); @@ -145,6 +155,7 @@ private: void do_complete_join(ModelAction *join); ModelAction *diverge; + ModelAction *earliest_diverge; ucontext_t system_context; action_list_t *action_trace; @@ -195,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;