model: re-check pending future values whenever a promise is resolved
[c11tester.git] / model.cc
index a9d90914afbbe5205cabc01513b25082d4ca2e4b..167ea947a79a020964ec13fc67d67077aae961f7 100644 (file)
--- a/model.cc
+++ b/model.cc
@@ -1139,12 +1139,13 @@ bool ModelChecker::process_write(ModelAction *curr)
                }
        }
 
-       if (promises->empty()) {
-               for (unsigned int i = 0; i < futurevalues->size(); i++) {
-                       struct PendingFutureValue pfv = (*futurevalues)[i];
+       /* Check the pending future values */
+       for (int i = (int)futurevalues->size() - 1; i >= 0; i--) {
+               struct PendingFutureValue pfv = (*futurevalues)[i];
+               if (promises_may_allow(pfv.writer, pfv.reader)) {
                        add_future_value(pfv.writer, pfv.reader);
+                       futurevalues->erase(futurevalues->begin() + i);
                }
-               futurevalues->clear();
        }
 
        mo_graph->commitChanges();