model: report status of resolved promises
authorBrian Norris <banorris@uci.edu>
Fri, 24 Aug 2012 00:50:21 +0000 (17:50 -0700)
committerBrian Norris <banorris@uci.edu>
Sat, 25 Aug 2012 01:35:23 +0000 (18:35 -0700)
The rest of the model checker needs to know when promises are added, so add a
return status as a boolean.

model.cc
model.h

index bd0c3dc2753e8a752daaee6fd3e24c84965abcea..bd4496b14b99915b382afaf075ef4958ae9fbe82 100644 (file)
--- a/model.cc
+++ b/model.cc
@@ -696,9 +696,11 @@ ClockVector * ModelChecker::get_cv(thread_id_t tid)
  * Resolve a set of Promises with a current write. The set is provided in the
  * Node corresponding to @a write.
  * @param write The ModelAction that is fulfilling Promises
  * Resolve a set of Promises with a current write. The set is provided in the
  * Node corresponding to @a write.
  * @param write The ModelAction that is fulfilling Promises
+ * @return True if promises were resolved; false otherwise
  */
  */
-void ModelChecker::resolve_promises(ModelAction *write)
+bool ModelChecker::resolve_promises(ModelAction *write)
 {
 {
+       bool resolved = false;
        for (unsigned int i = 0, promise_index = 0; promise_index < promises->size(); i++) {
                Promise *promise = (*promises)[promise_index];
                if (write->get_node()->get_promise(i)) {
        for (unsigned int i = 0, promise_index = 0; promise_index < promises->size(); i++) {
                Promise *promise = (*promises)[promise_index];
                if (write->get_node()->get_promise(i)) {
@@ -707,9 +709,11 @@ void ModelChecker::resolve_promises(ModelAction *write)
                        r_modification_order(read, write);
                        post_r_modification_order(read, write);
                        promises->erase(promises->begin() + promise_index);
                        r_modification_order(read, write);
                        post_r_modification_order(read, write);
                        promises->erase(promises->begin() + promise_index);
+                       resolved = true;
                } else
                        promise_index++;
        }
                } else
                        promise_index++;
        }
+       return resolved;
 }
 
 /**
 }
 
 /**
diff --git a/model.h b/model.h
index dea744c8bda1e6f61ab1b4173ae45e0bd5291ba8..0666472d9a2ca9a441db9e3195943ad0b6158e9a 100644 (file)
--- a/model.h
+++ b/model.h
@@ -93,7 +93,7 @@ private:
        thread_id_t get_next_replay_thread();
        ModelAction * get_next_backtrack();
        void reset_to_initial_state();
        thread_id_t get_next_replay_thread();
        ModelAction * get_next_backtrack();
        void reset_to_initial_state();
-       void resolve_promises(ModelAction *curr);
+       bool resolve_promises(ModelAction *curr);
        void compute_promises(ModelAction *curr);
 
        void add_action_to_lists(ModelAction *act);
        void compute_promises(ModelAction *curr);
 
        void add_action_to_lists(ModelAction *act);