int maxfuturedelay;
unsigned int fairwindow;
unsigned int enabledcount;
+ unsigned int bound;
};
struct PendingFutureValue {
- uint64_t value;
- modelclock_t expiration;
+ ModelAction *writer;
ModelAction * act;
};
bool isfeasible();
bool isfeasibleotherthanRMW();
bool isfinalfeasible();
+ void check_promises_thread_disabled();
void mo_check_promises(thread_id_t tid, const ModelAction *write);
void check_promises(thread_id_t tid, ClockVector *old_cv, ClockVector * merge_cv);
void get_release_seq_heads(ModelAction *act, rel_heads_list_t *release_heads);
const model_params params;
Scheduler * get_scheduler() { return scheduler;}
+ Node * get_curr_node();
MEMALLOC
private:
bool sleep_can_read_from(ModelAction * curr, const ModelAction *write);
bool thin_air_constraint_may_allow(const ModelAction * writer, const ModelAction *reader);
+ bool mo_may_allow(const ModelAction * writer, const ModelAction *reader);
bool has_asserted() {return asserted;}
void reset_asserted() {asserted=false;}
int num_executions;
*/
void set_current_action(ModelAction *act) { priv->current_action = act; }
Thread * check_current_action(ModelAction *curr);
- ModelAction * initialize_curr_action(ModelAction *curr);
+ bool initialize_curr_action(ModelAction **curr);
bool process_read(ModelAction *curr, bool second_part_of_rmw);
bool process_write(ModelAction *curr);
bool process_mutex(ModelAction *curr);
bool w_modification_order(ModelAction *curr);
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 do_complete_join(ModelAction *join);
ModelAction *diverge;
ModelAction *earliest_diverge;
* to a trace of all actions performed on the object. */
HashTable<const void *, action_list_t, uintptr_t, 4> *lock_waiters_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> *condvar_waiters_map;
+
HashTable<void *, std::vector<action_list_t>, uintptr_t, 4 > *obj_thrd_map;
std::vector< Promise *, SnapshotAlloc<Promise *> > *promises;
std::vector< struct PendingFutureValue, SnapshotAlloc<struct PendingFutureValue> > *futurevalues;