return promises->size() == 0 && pending_rel_seqs->size() == 0 && !is_infeasible();
}
+/** Returns whether the current completed trace is feasible. */
+bool ModelChecker::isfinalfeasible() const
+{
+ if (DBG_ENABLED() && promises->size() != 0)
+ DEBUG("Infeasible: unrevolved promises\n");
+
+ return !is_infeasible() && promises->size() == 0;
+}
+
/**
* Check if the current partial trace is infeasible. Does not check any
* end-of-execution flags, which might rule out the execution. Thus, this is
promises_expired();
}
-/** Returns whether the current completed trace is feasible. */
-bool ModelChecker::isfinalfeasible() const
-{
- if (DBG_ENABLED() && promises->size() != 0)
- DEBUG("Infeasible: unrevolved promises\n");
-
- return !is_infeasible() && promises->size() == 0;
-}
-
/** Close out a RMWR by converting previous RMWR into a RMW or READ. */
ModelAction * ModelChecker::process_rmw(ModelAction *act) {
ModelAction *lastread = get_last_action(act->get_tid());
int switch_to_master(ModelAction *act);
ClockVector * get_cv(thread_id_t tid);
ModelAction * get_parent_action(thread_id_t tid);
- bool isfinalfeasible() const;
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);
struct execution_stats stats;
void record_stats();
+ bool isfinalfeasible() const;
bool is_infeasible_ignoreRMW() const;
bool is_infeasible() const;
bool is_deadlocked() const;