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();
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();
bool w_modification_order(ModelAction *curr, ModelVector<ModelAction *> *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 action_trace;
- HashTable<int, Thread *, int> thread_map;
+ SnapVector<Thread *> 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 void *, action_list_t *, uintptr_t, 4> * const obj_map;
+ HashTable<const void *, action_list_t *, uintptr_t, 4> obj_map;
/** Per-object list of actions. Maps an object (i.e., memory location)
* to a trace of all actions performed on the object. */