X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=action.cc;h=317c6a7cd87d9a94fbb695ecb95615ed5bae5613;hb=09c3eb5539455e82dcb357fbce82bf5974c3a37c;hp=2fb498f4a05baf6dc783f7efdf2efc5bd2db0c9b;hpb=c6dfb2568e6132123341ade757bf2b3119f1646e;p=model-checker.git diff --git a/action.cc b/action.cc index 2fb498f..317c6a7 100644 --- a/action.cc +++ b/action.cc @@ -31,6 +31,7 @@ ModelAction::ModelAction(action_type_t type, memory_order order, void *loc, location(loc), value(value), reads_from(NULL), + reads_from_promise(NULL), last_fence_release(NULL), node(NULL), seq_number(ACTION_INITIAL_CLOCK), @@ -252,10 +253,11 @@ void ModelAction::copy_typeandorder(ModelAction * act) */ Thread * ModelAction::get_thread_operand() const { - if (type == THREAD_CREATE) - /* THREAD_CREATE uses (Thread *) for location */ - return (Thread *)get_location(); - else if (type == THREAD_JOIN) + if (type == THREAD_CREATE) { + /* THREAD_CREATE stores its (Thread *) in a thrd_t::priv */ + thrd_t *thrd = (thrd_t *)get_location(); + return thrd->priv; + } else if (type == THREAD_JOIN) /* THREAD_JOIN uses (Thread *) for location */ return (Thread *)get_location(); else @@ -298,15 +300,13 @@ bool ModelAction::could_synchronize_with(const ModelAction *act) const if (!same_var(act)) return false; - // Explore interleavings of seqcst writes/fences to guarantee total + // Explore interleavings of seqcst writes to guarantee total // order of seq_cst operations that don't commute - if ((could_be_write() || act->could_be_write() || is_fence() || act->is_fence()) - && is_seqcst() && act->is_seqcst()) + if ((could_be_write() || act->could_be_write()) && is_seqcst() && act->is_seqcst()) return true; - // Explore synchronizing read/write/fence pairs - if (is_acquire() && act->is_release() && (is_read() || is_fence()) && - (act->could_be_write() || act->is_fence())) + // Explore synchronizing read/write pairs + if (is_acquire() && act->is_release() && is_read() && act->could_be_write()) return true; // lock just released...we can grab lock