From: Brian Demsky <bdemsky@uci.edu>
Date: Sun, 14 Apr 2013 07:57:55 +0000 (-0700)
Subject: clean up printing a little for cycle cases...
X-Git-Tag: oopsla2013~82
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=d21164220a0d87ae931bf50d0e97ebf838742659;p=model-checker.git

clean up printing a little for cycle cases...
---

diff --git a/scanalysis.cc b/scanalysis.cc
index 83a8227..b1b6a05 100644
--- a/scanalysis.cc
+++ b/scanalysis.cc
@@ -65,6 +65,31 @@ ModelAction * SCAnalysis::getNextAction() {
 			act=first;
 		}
 	}
+	if (act==NULL)
+		return act;
+	//print cycles in a nice way to avoid confusion
+	//make sure thread starts appear after the create
+	if (act->is_thread_start()) {
+		ModelAction *createact=model->get_thread(act)->get_creation();
+		if (createact) {
+			action_list_t *threadlist=&(*threadlists)[id_to_int(createact->get_tid())];
+			if (!threadlist->empty()) {
+				ModelAction *first=threadlist->front();
+				if (first->get_seq_number() <= createact->get_seq_number())
+					act=first;
+			}
+		}
+	}
+
+	//make sure that joins appear after the thread is finished
+	if (act->is_thread_join()) {
+		int jointhread=id_to_int(act->get_thread_operand()->get_id());
+		action_list_t *threadlist=&(*threadlists)[jointhread];
+		if (!threadlist->empty()) {
+			act=threadlist->front();
+		}
+	}
+
 	return act;
 }