bugfix: straighten out STL vector allocation (snapshotted vs. persistent)
[model-checker.git] / model.cc
index 4475455b14bd97afbe47e4aca32f449feb3d4025..031f6a935ec5701bdf72fdf2bdfe321e70712a28 100644 (file)
--- a/model.cc
+++ b/model.cc
@@ -393,6 +393,7 @@ Thread * ModelChecker::check_current_action(ModelAction *curr)
        }
 
        bool updated = false;
+
        if (curr->is_read()) {
                updated = process_read(curr, get_thread(curr), second_part_of_rmw);
        }
@@ -400,7 +401,7 @@ Thread * ModelChecker::check_current_action(ModelAction *curr)
        if (curr->is_write()) {
                bool updated_mod_order = w_modification_order(curr);
                bool updated_promises = resolve_promises(curr);
-               updated = updated_mod_order|updated_promises;
+               updated = updated || updated_mod_order || updated_promises;
 
                if (promises->size()==0) {
                        for (unsigned int i = 0; i<futurevalues->size(); i++) {
@@ -779,13 +780,15 @@ bool ModelChecker::thin_air_constraint_may_allow(const ModelAction * writer, con
  * false otherwise
  */
 bool ModelChecker::release_seq_head(const ModelAction *rf,
-                std::vector<const ModelAction *> *release_heads) const
+                std::vector< const ModelAction *, MyAlloc<const ModelAction *> > *release_heads) const
 {
-       ASSERT(rf->is_write());
        if (!rf) {
                /* read from future: need to settle this later */
                return false; /* incomplete */
        }
+
+       ASSERT(rf->is_write());
+
        if (rf->is_release())
                release_heads->push_back(rf);
        if (rf->is_rmw()) {
@@ -883,7 +886,7 @@ bool ModelChecker::release_seq_head(const ModelAction *rf,
  * @see ModelChecker::release_seq_head
  */
 void ModelChecker::get_release_seq_heads(ModelAction *act,
-                std::vector<const ModelAction *> *release_heads)
+                std::vector< const ModelAction *, MyAlloc<const ModelAction *> > *release_heads)
 {
        const ModelAction *rf = act->get_reads_from();
        bool complete;
@@ -919,7 +922,7 @@ bool ModelChecker::resolve_release_sequences(void *location)
        while (it != list->end()) {
                ModelAction *act = *it;
                const ModelAction *rf = act->get_reads_from();
-               std::vector<const ModelAction *> release_heads;
+               std::vector< const ModelAction *, MyAlloc<const ModelAction *> > release_heads;
                bool complete;
                complete = release_seq_head(rf, &release_heads);
                for (unsigned int i = 0; i < release_heads.size(); i++) {