(1) In the fence-acquire search, we can't stop searching for prior loads
when we reach the current action; we must continue to search until
we find a *different* fence-acquire (or the beginning of the thread)
(2) The load action does not synchronize in fence-acquire
synchronization: the fence should synchronize. This was just a typo
(act vs. curr).
/* Find X : is_read(X) && X --sb-> curr */
for (rit = list->rbegin(); rit != list->rend(); rit++) {
ModelAction *act = *rit;
+ if (act == curr)
+ continue;
if (act->get_tid() != curr->get_tid())
continue;
/* Stop at the beginning of the thread */
rel_heads_list_t release_heads;
get_release_seq_heads(curr, act, &release_heads);
for (unsigned int i = 0; i < release_heads.size(); i++)
- if (!act->synchronize_with(release_heads[i]))
+ if (!curr->synchronize_with(release_heads[i]))
set_bad_synchronization();
if (release_heads.size() != 0)
updated = true;