X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=model.h;h=5a127b1dd979a59c6d9cfe1e830ce0db7c58f860;hb=24dbae977ee0610d314b52a42a77f1a6f39752b3;hp=8345678fab7f0724a2a4dd7f638470d84bb46483;hpb=5e4e1eebcf9a6248ba9227d7f486ad1fe2a2d3d1;p=model-checker.git diff --git a/model.h b/model.h index 8345678..5a127b1 100644 --- a/model.h +++ b/model.h @@ -67,7 +67,8 @@ struct execution_stats { }; struct PendingFutureValue { - ModelAction *writer; + PendingFutureValue(ModelAction *writer, ModelAction *act) : writer(writer), act(act) { } + const ModelAction *writer; ModelAction *act; }; @@ -120,7 +121,7 @@ public: ClockVector * get_cv(thread_id_t tid) const; ModelAction * get_parent_action(thread_id_t tid) const; void check_promises_thread_disabled(); - void mo_check_promises(thread_id_t tid, const ModelAction *write); + void mo_check_promises(thread_id_t tid, const ModelAction *write, const ModelAction * read); void check_promises(thread_id_t tid, ClockVector *old_cv, ClockVector *merge_cv); bool isfeasibleprefix() const; @@ -148,7 +149,7 @@ private: bool next_execution(); void set_current_action(ModelAction *act); - Thread * check_current_action(ModelAction *curr); + ModelAction * check_current_action(ModelAction *curr); bool initialize_curr_action(ModelAction **curr); bool process_read(ModelAction *curr, bool second_part_of_rmw); bool process_write(ModelAction *curr); @@ -165,6 +166,7 @@ private: ModelAction * get_last_conflict(ModelAction *act); void set_backtracking(ModelAction *act); Thread * get_next_thread(ModelAction *curr); + bool set_latest_backtrack(ModelAction *act); ModelAction * get_next_backtrack(); void reset_to_initial_state(); bool resolve_promises(ModelAction *curr); @@ -186,6 +188,7 @@ private: void get_release_seq_heads(ModelAction *acquire, ModelAction *read, rel_heads_list_t *release_heads); bool release_seq_heads(const ModelAction *rf, rel_heads_list_t *release_heads, struct release_seq *pending) const; bool resolve_release_sequences(void *location, work_queue_t *work_queue); + void add_future_value(const ModelAction *writer, ModelAction *reader); ModelAction * new_uninitialized_action(void *location) const; @@ -252,6 +255,7 @@ private: struct execution_stats stats; void record_stats(); + void print_infeasibility(const char *prefix) const; bool is_feasible_prefix_ignore_relseq() const; bool is_infeasible_ignoreRMW() const; bool is_infeasible() const;