X-Git-Url: http://plrg.eecs.uci.edu/git/?p=model-checker.git;a=blobdiff_plain;f=execution.h;h=bb4ebb08f0b67cb3b30af855196c3b2b217b8013;hp=12603b2fcb49bcf8555982aa09b02d2756925195;hb=dd1f275d3e8042282bad49cf85fddfc2a5735166;hpb=29de97f281defdf0c79ef4afc5abf88b430d3864 diff --git a/execution.h b/execution.h index 12603b2..bb4ebb0 100644 --- a/execution.h +++ b/execution.h @@ -61,11 +61,13 @@ struct release_seq { class ModelExecution { public: ModelExecution(ModelChecker *m, - struct model_params *params, + const struct model_params *params, Scheduler *scheduler, NodeStack *node_stack); ~ModelExecution(); + const struct model_params * get_params() const { return params; } + Thread * take_step(ModelAction *curr); void fixup_release_sequences(); @@ -107,11 +109,12 @@ public: bool is_feasible_prefix_ignore_relseq() const; bool is_infeasible() const; bool is_deadlocked() const; + bool is_yieldblocked() const; bool too_many_steps() const; ModelAction * get_next_backtrack(); - action_list_t * get_action_trace() const { return action_trace; } + action_list_t * get_action_trace() { return &action_trace; } SNAPSHOTALLOC private: @@ -180,17 +183,18 @@ private: 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; + void propagate_clockvector(ModelAction *acquire, work_queue_t *work); bool resolve_release_sequences(void *location, work_queue_t *work_queue); void add_future_value(const ModelAction *writer, ModelAction *reader); ModelAction * get_uninitialized_action(const ModelAction *curr) const; - action_list_t * const action_trace; - HashTable thread_map; + action_list_t action_trace; + SnapVector thread_map; /** Per-object list of actions. Maps an object (i.e., memory location) * to a trace of all actions performed on the object. */ - HashTable * const obj_map; + HashTable obj_map; /** Per-object list of actions. Maps an object (i.e., memory location) * to a trace of all actions performed on the object. */