From: Brian Norris <banorris@uci.edu>
Date: Sun, 7 Oct 2012 22:04:08 +0000 (-0700)
Subject: model: disabled threads are "future ordered"
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=8669bd6f88178382893b48223498611f2200714a;p=cdsspec-compiler.git

model: disabled threads are "future ordered"

If a Thread is not currently enabled, then it will synchronize with
another (currently-enabled) Thread if/when it wakes up. Thus, it
qualifies as "future ordered" within the release sequence code: it
cannot contribute future writes that will break current pending release
sequences.
---

diff --git a/model.cc b/model.cc
index 2260431..6eaf656 100644
--- a/model.cc
+++ b/model.cc
@@ -1258,8 +1258,10 @@ bool ModelChecker::release_seq_heads(const ModelAction *rf,
 		bool future_ordered = false;
 
 		ModelAction *last = get_last_action(int_to_id(i));
-		if (last && (rf->happens_before(last) ||
-				get_thread(int_to_id(i))->is_complete()))
+		Thread *th = get_thread(int_to_id(i));
+		if ((last && rf->happens_before(last)) ||
+				!scheduler->is_enabled(th) ||
+				th->is_complete())
 			future_ordered = true;
 
 		for (rit = list->rbegin(); rit != list->rend(); rit++) {