int num_executions;
int num_feasible_executions;
bool promises_expired();
-
+ void execute_sleep_set();
+ void wake_up_sleeping_actions(ModelAction * curr);
modelclock_t get_next_seq_num();
/**
void post_r_modification_order(ModelAction *curr, const ModelAction *rf);
bool r_modification_order(ModelAction *curr, const ModelAction *rf);
bool w_modification_order(ModelAction *curr);
- bool release_seq_heads(const ModelAction *rf, rel_heads_list_t *release_heads) const;
+ 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);
std::vector<struct PendingFutureValue> *futurevalues;
/**
- * List of acquire actions that might synchronize with one or more
- * release sequence. Release sequences might be determined lazily as
- * promises are fulfilled and modification orders are established. Each
- * ModelAction in this list must be an acquire operation.
+ * List of pending release sequences. Release sequences might be
+ * determined lazily as promises are fulfilled and modification orders
+ * are established. Each entry in the list may only be partially
+ * filled, depending on its pending status.
*/
- std::vector<ModelAction *> *pending_acq_rel_seq;
+ std::vector<struct release_seq *> *pending_rel_seqs;
std::vector<ModelAction *> *thrd_last_action;
NodeStack *node_stack;