thrd_last_fence_release(),
priv(new struct model_snapshot_members ()),
mo_graph(new CycleGraph()),
- fuzzer(new NewFuzzer()),
+ fuzzer(new Fuzzer()),
isfinished(false)
{
/* Initialize a model-checker thread, for special ModelActions */
ModelAction *act = it->getVal();
//Do iteration early since we may delete node...
it=it->getPrev();
+ bool islastact = false;
+ ModelAction *lastact = get_last_action(act->get_tid());
+ if (act == lastact) {
+ Thread * th = get_thread(act);
+ islastact = !th->is_complete();
+ }
+
if (act->is_read()) {
- if (act->get_reads_from()->is_free()) {
+ if (islastact) {
+ act->set_read_from(NULL);
+ continue;
+ } else if (act->get_reads_from()->is_free()) {
removeAction(act);
delete act;
} else {
act->set_last_fence_release(NULL);
}
}
+ } else if (islastact) {
+ continue;
} else if (act->is_free()) {
removeAction(act);
delete act;
removeAction(act);
delete act;
}
+ } else if (act->is_create()) {
+ if (act->get_thread_operand()->is_complete()) {
+ removeAction(act);
+ delete act;
+ }
} else {
removeAction(act);
delete act;