X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=model.h;h=355764b7c4d290cfb3de64f7f0c0086a0ba83c73;hb=262fab229626c8504297467fc7b5a04f60b7c530;hp=0af3425deefa1743fd03ca99c055678c26f48e22;hpb=7524803854c2de38c0311fe5037e3c17105ccfaa;p=model-checker.git diff --git a/model.h b/model.h index 0af3425..355764b 100644 --- a/model.h +++ b/model.h @@ -5,7 +5,6 @@ #ifndef __MODEL_H__ #define __MODEL_H__ -#include "stl_wrappers.h" #include #include #include @@ -15,6 +14,7 @@ #include "workqueue.h" #include "config.h" #include "modeltypes.h" +#include "stl-model.h" /* Forward declaration */ class Node; @@ -27,9 +27,9 @@ class ClockVector; struct model_snapshot_members; /** @brief Shorthand for a list of release sequence heads */ -typedef model_vector< const ModelAction * > rel_heads_list_t; +typedef ModelVector rel_heads_list_t; -typedef snap_list< ModelAction * > action_list_t; +typedef SnapList action_list_t; /** * Model checker parameter structure. Holds run-time configuration options for @@ -73,9 +73,11 @@ struct execution_stats { }; struct PendingFutureValue { - PendingFutureValue(ModelAction *writer, ModelAction *act) : writer(writer), act(act) { } + PendingFutureValue(ModelAction *writer, ModelAction *reader) : + writer(writer), reader(reader) + { } const ModelAction *writer; - ModelAction *act; + ModelAction *reader; }; /** @brief Records information regarding a single pending release sequence */ @@ -92,7 +94,7 @@ struct release_seq { /** @brief The head of the potential longest release sequence chain */ const ModelAction *release; /** @brief The write(s) that may break the release sequence */ - std::vector writes; + SnapVector writes; }; /** @brief The central structure for model-checking */ @@ -111,8 +113,6 @@ public: void dumpGraph(char *filename) const; #endif - void add_thread(Thread *t); - void remove_thread(Thread *t); Thread * get_thread(thread_id_t tid) const; Thread * get_thread(const ModelAction *act) const; int get_promise_number(const Promise *promise) const; @@ -143,9 +143,12 @@ private: /** The scheduler to use: tracks the running/ready Threads */ Scheduler * const scheduler; + void add_thread(Thread *t); + bool sleep_can_read_from(ModelAction *curr, const ModelAction *write); - bool thin_air_constraint_may_allow(const ModelAction *writer, const ModelAction *reader); + bool thin_air_constraint_may_allow(const ModelAction *writer, const ModelAction *reader) const; bool mo_may_allow(const ModelAction *writer, const ModelAction *reader); + bool promises_may_allow(const ModelAction *writer, const ModelAction *reader) const; bool has_asserted() const; void set_assert(); void set_bad_synchronization(); @@ -183,8 +186,8 @@ private: bool set_latest_backtrack(ModelAction *act); ModelAction * get_next_backtrack(); void reset_to_initial_state(); - int get_promise_to_resolve(const ModelAction *curr) const; - bool resolve_promise(ModelAction *curr, unsigned int promise_idx); + Promise * pop_promise_to_resolve(const ModelAction *curr); + bool resolve_promise(ModelAction *curr, Promise *promise); void compute_promises(ModelAction *curr); void compute_relseq_breakwrites(ModelAction *curr); @@ -204,7 +207,7 @@ private: template bool r_modification_order(ModelAction *curr, const rf_type *rf); - bool w_modification_order(ModelAction *curr, std::vector< ModelAction *, ModelAlloc > *send_fv); + bool w_modification_order(ModelAction *curr, ModelVector *send_fv); 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); @@ -231,9 +234,9 @@ private: * to a trace of all actions performed on the object. */ HashTable * const condvar_waiters_map; - HashTable *, uintptr_t, 4 > * const obj_thrd_map; - snap_vector< Promise * > * const promises; - snap_vector< struct PendingFutureValue > * const futurevalues; + HashTable *, uintptr_t, 4 > * const obj_thrd_map; + SnapVector * const promises; + SnapVector * const futurevalues; /** * List of pending release sequences. Release sequences might be @@ -241,10 +244,10 @@ private: * are established. Each entry in the list may only be partially * filled, depending on its pending status. */ - snap_vector< struct release_seq * > * const pending_rel_seqs; + SnapVector * const pending_rel_seqs; - snap_vector< ModelAction * > * const thrd_last_action; - snap_vector< ModelAction * > * const thrd_last_fence_release; + SnapVector * const thrd_last_action; + SnapVector * const thrd_last_fence_release; NodeStack * const node_stack; /** Private data members that should be snapshotted. They are grouped