From: Brian Demsky 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/?p=model-checker.git;a=commitdiff_plain;h=d21164220a0d87ae931bf50d0e97ebf838742659 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; }