Introduced bm_test_and_clear().
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7824 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/exp-drd/drd_thread.c b/exp-drd/drd_thread.c
index 55bf0fd..b8eb755 100644
--- a/exp-drd/drd_thread.c
+++ b/exp-drd/drd_thread.c
@@ -670,10 +670,13 @@
for (p = s_threadinfo[i].first; p; p = p->next)
{
if (other_user == DRD_INVALID_THREADID
- && i != s_drd_running_tid
- && bm_has_any_access(p->bm, a1, a2))
+ && i != s_drd_running_tid)
{
- other_user = i;
+ if (UNLIKELY(bm_test_and_clear(p->bm, a1, a2)))
+ {
+ other_user = i;
+ }
+ continue;
}
bm_clear(p->bm, a1, a2);
}