Changes:
- Generalized the behavior of happens-before / happens-after annotations such
that not only 1:1 but also n:m patterns are supported.
- Dropped support for invoking happens-before / happens-after annotations on
POSIX condition variables (pthread_cond_t).
- Report the details about the offending synchronization object in generic
errors.
- Converted a few tl_assert() statements into error messages.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11073 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/drd/drd_barrier.c b/drd/drd_barrier.c
index 90fa330..de8d67b 100644
--- a/drd/drd_barrier.c
+++ b/drd/drd_barrier.c
@@ -42,11 +42,11 @@
struct barrier_thread_info
{
UWord tid; // A DrdThreadId declared as UWord because
- // this member variable is the key of an OSet.
+ // this member variable is the key of an OSet.
Word iteration; // iteration of last pthread_barrier_wait()
- // call thread tid participated in.
+ // call thread tid participated in.
Segment* sg[2]; // Segments of the last two
- // pthread_barrier() calls by thread tid.
+ // pthread_barrier() calls by thread tid.
ExeContext* wait_call_ctxt;// call stack for *_barrier_wait() call.
Segment* post_wait_sg; // Segment created after *_barrier_wait() finished
};
@@ -308,7 +308,10 @@
if (p == 0)
{
- GenericErrInfo GEI = { DRD_(thread_get_running_tid)() };
+ GenericErrInfo GEI = {
+ .tid = DRD_(thread_get_running_tid)(),
+ .addr = barrier,
+ };
VG_(maybe_record_error)(VG_(get_running_tid)(),
GenericErr,
VG_(get_IP)(VG_(get_running_tid)()),