action: THREAD_JOIN can synchronize against execution order
[model-checker.git] / action.cc
index 5d726a2a0514f1c63c66fc3604ec8409fe0ba8cb..2021f0addc06b5d7622909d01458b0c71715bdd5 100644 (file)
--- a/action.cc
+++ b/action.cc
@@ -52,6 +52,11 @@ bool ModelAction::is_rmwc() const
        return type == ATOMIC_RMWC;
 }
 
+bool ModelAction::is_fence() const 
+{
+       return type == ATOMIC_FENCE;
+}
+
 bool ModelAction::is_initialization() const
 {
        return type == ATOMIC_INIT;
@@ -181,7 +186,7 @@ void ModelAction::read_from(const ModelAction *act)
  * @param act The ModelAction to synchronize with
  */
 void ModelAction::synchronize_with(const ModelAction *act) {
-       ASSERT(*act < *this);
+       ASSERT(*act < *this || type == THREAD_JOIN);
        model->check_promises(cv, act->cv);
        cv->merge(act->cv);
 }
@@ -230,6 +235,9 @@ void ModelAction::print(void) const
        case ATOMIC_RMW:
                type_str = "atomic rmw";
                break;
+       case ATOMIC_FENCE:
+               type_str = "fence";
+               break;
        case ATOMIC_RMWR:
                type_str = "atomic rmwr";
                break;