Mark Wielaard e420d8e
commit f4d91a5df8b749c6cdfec25e38a44c02c90ad4be
Mark Wielaard e420d8e
Author: Mark Wielaard <mjw@redhat.com>
Mark Wielaard e420d8e
Date:   Tue Jan 19 15:13:47 2016 +0100
Mark Wielaard ebed60b
Mark Wielaard e420d8e
    Bug #358213 helgrind/drd pthread_barrier tests vs new glibc implementation
Mark Wielaard e420d8e
    
Mark Wielaard e420d8e
    glibc 2.23 will have a new pthread_barrier implementation.
Mark Wielaard e420d8e
    This implementation reacts differently on bad usage of barriers.
Mark Wielaard e420d8e
    Because of this the bar_bad testcase will hang indefinitely.
Mark Wielaard e420d8e
    In particular pthread_barrier_destroy will hang when there are
Mark Wielaard e420d8e
    still other threads waiting on a barrier. To solve this we add
Mark Wielaard e420d8e
    extra threads to will "unblock" the hanging destroy by sleeping
Mark Wielaard e420d8e
    for a while and then also waiting on the barrier, which will unblock
Mark Wielaard e420d8e
    the destroy operation. Or if this is the last test, just exit
Mark Wielaard e420d8e
    the whole program since we are done anyway. Also newer glibc is
Mark Wielaard e420d8e
    more picky about destroying uninitialized barriers, we would crash
Mark Wielaard e420d8e
    when zero filling, so we now one fill. Which doesn't crash, but
Mark Wielaard e420d8e
    depending on glibc version might return an error or hang. Since
Mark Wielaard e420d8e
    depending on version we now get slightly different error reports
Mark Wielaard e420d8e
    there are now alternative exp files.
Mark Wielaard e420d8e
    
Mark Wielaard e420d8e
    Tested against glibc 2.17, glibc 2.22 and glibc 2.23-prerelease.
Mark Wielaard ebed60b
Mark Wielaard e420d8e
diff --git a/drd/tests/Makefile.am b/drd/tests/Makefile.am
Mark Wielaard e420d8e
index 2885391..cfd74d0 100644
Mark Wielaard e420d8e
--- a/drd/tests/Makefile.am
Mark Wielaard e420d8e
+++ b/drd/tests/Makefile.am
Mark Wielaard e420d8e
@@ -81,8 +81,10 @@ EXTRA_DIST =                                        \
Mark Wielaard e420d8e
 	atomic_var.stderr.exp			    \
Mark Wielaard e420d8e
 	atomic_var.vgtest			    \
Mark Wielaard e420d8e
 	bar_bad.stderr.exp			    \
Mark Wielaard e420d8e
+	bar_bad.stderr.exp-nohang		    \
Mark Wielaard e420d8e
 	bar_bad.vgtest				    \
Mark Wielaard e420d8e
 	bar_bad_xml.stderr.exp			    \
Mark Wielaard e420d8e
+	bar_bad_xml.stderr.exp-nohang		    \
Mark Wielaard e420d8e
 	bar_bad_xml.vgtest			    \
Mark Wielaard e420d8e
 	bar_trivial.stderr.exp			    \
Mark Wielaard e420d8e
 	bar_trivial.stdout.exp			    \
Mark Wielaard 9cfbdc0
diff --git a/drd/tests/bar_bad.stderr.exp b/drd/tests/bar_bad.stderr.exp
Mark Wielaard 9cfbdc0
index 75f121f..3581b08 100644
Mark Wielaard 9cfbdc0
--- a/drd/tests/bar_bad.stderr.exp
Mark Wielaard 9cfbdc0
+++ b/drd/tests/bar_bad.stderr.exp
Mark Wielaard 9cfbdc0
@@ -34,16 +34,5 @@ barrier 0x........ was first observed at:
Mark Wielaard 9cfbdc0
 
Mark Wielaard 9cfbdc0
 
Mark Wielaard 9cfbdc0
 destroy a barrier that was never initialised
Mark Wielaard 9cfbdc0
-Not a barrier
Mark Wielaard 9cfbdc0
-   at 0x........: pthread_barrier_destroy (drd_pthread_intercepts.c:?)
Mark Wielaard 9cfbdc0
-   by 0x........: main (bar_bad.c:?)
Mark Wielaard 9cfbdc0
-
Mark Wielaard 9cfbdc0
-Destruction of barrier that is being waited upon: barrier 0x........
Mark Wielaard 9cfbdc0
-   at 0x........: free (vg_replace_malloc.c:...)
Mark Wielaard 9cfbdc0
-   by 0x........: main (bar_bad.c:?)
Mark Wielaard 9cfbdc0
-barrier 0x........ was first observed at:
Mark Wielaard 9cfbdc0
-   at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?)
Mark Wielaard 9cfbdc0
-   by 0x........: main (bar_bad.c:?)
Mark Wielaard 9cfbdc0
-
Mark Wielaard 9cfbdc0
 
Mark Wielaard 9cfbdc0
-ERROR SUMMARY: 7 errors from 6 contexts (suppressed: 0 from 0)
Mark Wielaard 9cfbdc0
+ERROR SUMMARY: 5 errors from 4 contexts (suppressed: 0 from 0)
Mark Wielaard b8858a0
diff --git a/drd/tests/bar_bad.stderr.exp-nohang b/drd/tests/bar_bad.stderr.exp-nohang
Mark Wielaard b8858a0
new file mode 100644
Mark Wielaard b8858a0
index 0000000..44f9651
Mark Wielaard b8858a0
--- /dev/null
Mark Wielaard 9cfbdc0
+++ b/drd/tests/bar_bad.stderr.exp-nohang
Mark Wielaard b8858a0
@@ -0,0 +1,42 @@
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+initialise a barrier with zero count
Mark Wielaard b8858a0
+pthread_barrier_init: 'count' argument is zero: barrier 0x........
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?)
Mark Wielaard b8858a0
+   by 0x........: main (bar_bad.c:?)
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+initialise a barrier twice
Mark Wielaard b8858a0
+Barrier reinitialization: barrier 0x........
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?)
Mark Wielaard b8858a0
+   by 0x........: main (bar_bad.c:?)
Mark Wielaard b8858a0
+barrier 0x........ was first observed at:
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?)
Mark Wielaard b8858a0
+   by 0x........: main (bar_bad.c:?)
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+initialise a barrier which has threads waiting on it
Mark Wielaard b8858a0
+Barrier reinitialization: barrier 0x........
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?)
Mark Wielaard b8858a0
+   by 0x........: main (bar_bad.c:?)
Mark Wielaard b8858a0
+barrier 0x........ was first observed at:
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?)
Mark Wielaard b8858a0
+   by 0x........: main (bar_bad.c:?)
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+destroy a barrier that has waiting threads
Mark Wielaard b8858a0
+Destruction of a barrier with active waiters: barrier 0x........
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_destroy (drd_pthread_intercepts.c:?)
Mark Wielaard b8858a0
+   by 0x........: main (bar_bad.c:?)
Mark Wielaard b8858a0
+barrier 0x........ was first observed at:
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_init (drd_pthread_intercepts.c:?)
Mark Wielaard b8858a0
+   by 0x........: main (bar_bad.c:?)
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+destroy a barrier that was never initialised
Mark Wielaard b8858a0
+Not a barrier
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_destroy (drd_pthread_intercepts.c:?)
Mark Wielaard b8858a0
+   by 0x........: main (bar_bad.c:?)
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard 9cfbdc0
+ERROR SUMMARY: 6 errors from 5 contexts (suppressed: 0 from 0)
Mark Wielaard 9cfbdc0
diff --git a/drd/tests/bar_bad_xml.stderr.exp b/drd/tests/bar_bad_xml.stderr.exp
Mark Wielaard 9cfbdc0
index acb9656..8539f75 100644
Mark Wielaard 9cfbdc0
--- a/drd/tests/bar_bad_xml.stderr.exp
Mark Wielaard 9cfbdc0
+++ b/drd/tests/bar_bad_xml.stderr.exp
Mark Wielaard 9cfbdc0
@@ -204,78 +204,6 @@ destroy a barrier that has waiting threads
Mark Wielaard 9cfbdc0
 
Mark Wielaard 9cfbdc0
 
Mark Wielaard 9cfbdc0
 destroy a barrier that was never initialised
Mark Wielaard 9cfbdc0
-<error>
Mark Wielaard 9cfbdc0
-  <unique>0x........</unique>
Mark Wielaard 9cfbdc0
-  <tid>...</tid>
Mark Wielaard 9cfbdc0
-  <kind>GenericErr</kind>
Mark Wielaard 9cfbdc0
-  <what>Not a barrier</what>
Mark Wielaard 9cfbdc0
-  <stack>
Mark Wielaard 9cfbdc0
-    <frame>
Mark Wielaard 9cfbdc0
-      <ip>0x........</ip>
Mark Wielaard 9cfbdc0
-      <obj>...</obj>
Mark Wielaard 9cfbdc0
-      <fn>pthread_barrier_destroy</fn>
Mark Wielaard 9cfbdc0
-      <dir>...</dir>
Mark Wielaard 9cfbdc0
-      <file>drd_pthread_intercepts.c</file>
Mark Wielaard 9cfbdc0
-      <line>...</line>
Mark Wielaard 9cfbdc0
-    </frame>
Mark Wielaard 9cfbdc0
-    <frame>
Mark Wielaard 9cfbdc0
-      <ip>0x........</ip>
Mark Wielaard 9cfbdc0
-      <obj>...</obj>
Mark Wielaard 9cfbdc0
-      <fn>main</fn>
Mark Wielaard 9cfbdc0
-      <dir>...</dir>
Mark Wielaard 9cfbdc0
-      <file>bar_bad.c</file>
Mark Wielaard 9cfbdc0
-      <line>...</line>
Mark Wielaard 9cfbdc0
-    </frame>
Mark Wielaard 9cfbdc0
-  </stack>
Mark Wielaard 9cfbdc0
-</error>
Mark Wielaard 9cfbdc0
-
Mark Wielaard 9cfbdc0
-<error>
Mark Wielaard 9cfbdc0
-  <unique>0x........</unique>
Mark Wielaard 9cfbdc0
-  <tid>...</tid>
Mark Wielaard 9cfbdc0
-  <kind>BarrierErr</kind>
Mark Wielaard 9cfbdc0
-  <what>Destruction of barrier that is being waited upon: barrier 0x........</what>
Mark Wielaard 9cfbdc0
-  <stack>
Mark Wielaard 9cfbdc0
-    <frame>
Mark Wielaard 9cfbdc0
-      <ip>0x........</ip>
Mark Wielaard 9cfbdc0
-      <obj>...</obj>
Mark Wielaard 9cfbdc0
-      <fn>free</fn>
Mark Wielaard 9cfbdc0
-      <dir>...</dir>
Mark Wielaard 9cfbdc0
-      <file>vg_replace_malloc.c</file>
Mark Wielaard 9cfbdc0
-      <line>...</line>
Mark Wielaard 9cfbdc0
-    </frame>
Mark Wielaard 9cfbdc0
-    <frame>
Mark Wielaard 9cfbdc0
-      <ip>0x........</ip>
Mark Wielaard 9cfbdc0
-      <obj>...</obj>
Mark Wielaard 9cfbdc0
-      <fn>main</fn>
Mark Wielaard 9cfbdc0
-      <dir>...</dir>
Mark Wielaard 9cfbdc0
-      <file>bar_bad.c</file>
Mark Wielaard 9cfbdc0
-      <line>...</line>
Mark Wielaard 9cfbdc0
-    </frame>
Mark Wielaard 9cfbdc0
-  </stack>
Mark Wielaard 9cfbdc0
-  <first_observed_at>
Mark Wielaard 9cfbdc0
-    <what>barrier</what>
Mark Wielaard 9cfbdc0
-    <address>0x........</address>
Mark Wielaard 9cfbdc0
-  <stack>
Mark Wielaard 9cfbdc0
-    <frame>
Mark Wielaard 9cfbdc0
-      <ip>0x........</ip>
Mark Wielaard 9cfbdc0
-      <obj>...</obj>
Mark Wielaard 9cfbdc0
-      <fn>pthread_barrier_init</fn>
Mark Wielaard 9cfbdc0
-      <dir>...</dir>
Mark Wielaard 9cfbdc0
-      <file>drd_pthread_intercepts.c</file>
Mark Wielaard 9cfbdc0
-      <line>...</line>
Mark Wielaard 9cfbdc0
-    </frame>
Mark Wielaard 9cfbdc0
-    <frame>
Mark Wielaard 9cfbdc0
-      <ip>0x........</ip>
Mark Wielaard 9cfbdc0
-      <obj>...</obj>
Mark Wielaard 9cfbdc0
-      <fn>main</fn>
Mark Wielaard 9cfbdc0
-      <dir>...</dir>
Mark Wielaard 9cfbdc0
-      <file>bar_bad.c</file>
Mark Wielaard 9cfbdc0
-      <line>...</line>
Mark Wielaard 9cfbdc0
-    </frame>
Mark Wielaard 9cfbdc0
-  </stack>
Mark Wielaard 9cfbdc0
-  </first_observed_at>
Mark Wielaard 9cfbdc0
-</error>
Mark Wielaard 9cfbdc0
-
Mark Wielaard 9cfbdc0
 
Mark Wielaard 9cfbdc0
 <status>
Mark Wielaard 9cfbdc0
   <state>FINISHED</state>
Mark Wielaard 9cfbdc0
@@ -299,14 +227,6 @@ destroy a barrier that was never initialised
Mark Wielaard 9cfbdc0
     <count>...</count>
Mark Wielaard 9cfbdc0
     <unique>0x........</unique>
Mark Wielaard 9cfbdc0
   </pair>
Mark Wielaard 9cfbdc0
-  <pair>
Mark Wielaard 9cfbdc0
-    <count>...</count>
Mark Wielaard 9cfbdc0
-    <unique>0x........</unique>
Mark Wielaard 9cfbdc0
-  </pair>
Mark Wielaard 9cfbdc0
-  <pair>
Mark Wielaard 9cfbdc0
-    <count>...</count>
Mark Wielaard 9cfbdc0
-    <unique>0x........</unique>
Mark Wielaard 9cfbdc0
-  </pair>
Mark Wielaard 9cfbdc0
 </errorcounts>
Mark Wielaard 9cfbdc0
 
Mark Wielaard 9cfbdc0
 <suppcounts>...</suppcounts>
Mark Wielaard b8858a0
diff --git a/drd/tests/bar_bad_xml.stderr.exp-nohang b/drd/tests/bar_bad_xml.stderr.exp-nohang
Mark Wielaard b8858a0
new file mode 100644
Mark Wielaard b8858a0
index 0000000..a47cd60
Mark Wielaard b8858a0
--- /dev/null
Mark Wielaard 9cfbdc0
+++ b/drd/tests/bar_bad_xml.stderr.exp-nohang
Mark Wielaard b8858a0
@@ -0,0 +1,264 @@
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+<valgrindoutput>
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+<protocolversion>4</protocolversion>
Mark Wielaard b8858a0
+<protocoltool>drd</protocoltool>
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+<preamble>
Mark Wielaard b8858a0
+  <line>...</line>
Mark Wielaard b8858a0
+  <line>...</line>
Mark Wielaard b8858a0
+  <line>...</line>
Mark Wielaard b8858a0
+  <line>...</line>
Mark Wielaard b8858a0
+</preamble>
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+<pid>...</pid>
Mark Wielaard b8858a0
+<ppid>...</ppid>
Mark Wielaard b8858a0
+<tool>drd</tool>
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+<args>
Mark Wielaard b8858a0
+  <vargv>...</vargv>
Mark Wielaard b8858a0
+  <argv>
Mark Wielaard b8858a0
+    <exe>./../../helgrind/tests/bar_bad</exe>
Mark Wielaard b8858a0
+  </argv>
Mark Wielaard b8858a0
+</args>
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+<status>
Mark Wielaard b8858a0
+  <state>RUNNING</state>
Mark Wielaard b8858a0
+  <time>...</time>
Mark Wielaard b8858a0
+</status>
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+initialise a barrier with zero count
Mark Wielaard b8858a0
+<error>
Mark Wielaard b8858a0
+  <unique>0x........</unique>
Mark Wielaard b8858a0
+  <tid>...</tid>
Mark Wielaard b8858a0
+  <kind>BarrierErr</kind>
Mark Wielaard b8858a0
+  <what>pthread_barrier_init: 'count' argument is zero: barrier 0x........</what>
Mark Wielaard b8858a0
+  <stack>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>pthread_barrier_init</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>drd_pthread_intercepts.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>main</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>bar_bad.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+  </stack>
Mark Wielaard b8858a0
+</error>
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+initialise a barrier twice
Mark Wielaard b8858a0
+<error>
Mark Wielaard b8858a0
+  <unique>0x........</unique>
Mark Wielaard b8858a0
+  <tid>...</tid>
Mark Wielaard b8858a0
+  <kind>BarrierErr</kind>
Mark Wielaard b8858a0
+  <what>Barrier reinitialization: barrier 0x........</what>
Mark Wielaard b8858a0
+  <stack>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>pthread_barrier_init</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>drd_pthread_intercepts.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>main</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>bar_bad.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+  </stack>
Mark Wielaard b8858a0
+  <first_observed_at>
Mark Wielaard b8858a0
+    <what>barrier</what>
Mark Wielaard b8858a0
+    <address>0x........</address>
Mark Wielaard b8858a0
+  <stack>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>pthread_barrier_init</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>drd_pthread_intercepts.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>main</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>bar_bad.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+  </stack>
Mark Wielaard b8858a0
+  </first_observed_at>
Mark Wielaard b8858a0
+</error>
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+initialise a barrier which has threads waiting on it
Mark Wielaard b8858a0
+<error>
Mark Wielaard b8858a0
+  <unique>0x........</unique>
Mark Wielaard b8858a0
+  <tid>...</tid>
Mark Wielaard b8858a0
+  <kind>BarrierErr</kind>
Mark Wielaard b8858a0
+  <what>Barrier reinitialization: barrier 0x........</what>
Mark Wielaard b8858a0
+  <stack>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>pthread_barrier_init</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>drd_pthread_intercepts.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>main</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>bar_bad.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+  </stack>
Mark Wielaard b8858a0
+  <first_observed_at>
Mark Wielaard b8858a0
+    <what>barrier</what>
Mark Wielaard b8858a0
+    <address>0x........</address>
Mark Wielaard b8858a0
+  <stack>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>pthread_barrier_init</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>drd_pthread_intercepts.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>main</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>bar_bad.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+  </stack>
Mark Wielaard b8858a0
+  </first_observed_at>
Mark Wielaard b8858a0
+</error>
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+destroy a barrier that has waiting threads
Mark Wielaard b8858a0
+<error>
Mark Wielaard b8858a0
+  <unique>0x........</unique>
Mark Wielaard b8858a0
+  <tid>...</tid>
Mark Wielaard b8858a0
+  <kind>BarrierErr</kind>
Mark Wielaard b8858a0
+  <what>Destruction of a barrier with active waiters: barrier 0x........</what>
Mark Wielaard b8858a0
+  <stack>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>pthread_barrier_destroy</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>drd_pthread_intercepts.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>main</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>bar_bad.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+  </stack>
Mark Wielaard b8858a0
+  <first_observed_at>
Mark Wielaard b8858a0
+    <what>barrier</what>
Mark Wielaard b8858a0
+    <address>0x........</address>
Mark Wielaard b8858a0
+  <stack>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>pthread_barrier_init</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>drd_pthread_intercepts.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>main</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>bar_bad.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+  </stack>
Mark Wielaard b8858a0
+  </first_observed_at>
Mark Wielaard b8858a0
+</error>
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+destroy a barrier that was never initialised
Mark Wielaard b8858a0
+<error>
Mark Wielaard b8858a0
+  <unique>0x........</unique>
Mark Wielaard b8858a0
+  <tid>...</tid>
Mark Wielaard b8858a0
+  <kind>GenericErr</kind>
Mark Wielaard b8858a0
+  <what>Not a barrier</what>
Mark Wielaard b8858a0
+  <stack>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>pthread_barrier_destroy</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>drd_pthread_intercepts.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+    <frame>
Mark Wielaard b8858a0
+      <ip>0x........</ip>
Mark Wielaard b8858a0
+      <obj>...</obj>
Mark Wielaard b8858a0
+      <fn>main</fn>
Mark Wielaard b8858a0
+      <dir>...</dir>
Mark Wielaard b8858a0
+      <file>bar_bad.c</file>
Mark Wielaard b8858a0
+      <line>...</line>
Mark Wielaard b8858a0
+    </frame>
Mark Wielaard b8858a0
+  </stack>
Mark Wielaard b8858a0
+</error>
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+<status>
Mark Wielaard b8858a0
+  <state>FINISHED</state>
Mark Wielaard b8858a0
+  <time>...</time>
Mark Wielaard b8858a0
+</status>
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+<errorcounts>
Mark Wielaard b8858a0
+  <pair>
Mark Wielaard b8858a0
+    <count>...</count>
Mark Wielaard b8858a0
+    <unique>0x........</unique>
Mark Wielaard b8858a0
+  </pair>
Mark Wielaard b8858a0
+  <pair>
Mark Wielaard b8858a0
+    <count>...</count>
Mark Wielaard b8858a0
+    <unique>0x........</unique>
Mark Wielaard b8858a0
+  </pair>
Mark Wielaard b8858a0
+  <pair>
Mark Wielaard b8858a0
+    <count>...</count>
Mark Wielaard b8858a0
+    <unique>0x........</unique>
Mark Wielaard b8858a0
+  </pair>
Mark Wielaard b8858a0
+  <pair>
Mark Wielaard b8858a0
+    <count>...</count>
Mark Wielaard b8858a0
+    <unique>0x........</unique>
Mark Wielaard b8858a0
+  </pair>
Mark Wielaard b8858a0
+  <pair>
Mark Wielaard b8858a0
+    <count>...</count>
Mark Wielaard b8858a0
+    <unique>0x........</unique>
Mark Wielaard b8858a0
+  </pair>
Mark Wielaard b8858a0
+</errorcounts>
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+<suppcounts>...</suppcounts>
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+</valgrindoutput>
Mark Wielaard b8858a0
+
Mark Wielaard ebed60b
diff --git a/helgrind/tests/Makefile.am b/helgrind/tests/Makefile.am
Mark Wielaard ebed60b
index 8a0d6e6..df82169 100644
Mark Wielaard ebed60b
--- a/helgrind/tests/Makefile.am
Mark Wielaard ebed60b
+++ b/helgrind/tests/Makefile.am
Mark Wielaard ebed60b
@@ -19,6 +19,7 @@ EXTRA_DIST = \
Mark Wielaard ebed60b
 	cond_timedwait_test.vgtest cond_timedwait_test.stdout.exp \
Mark Wielaard ebed60b
 		cond_timedwait_test.stderr.exp \
Mark Wielaard ebed60b
 	bar_bad.vgtest bar_bad.stdout.exp bar_bad.stderr.exp \
Mark Wielaard ebed60b
+		bar_bad.stderr.exp-destroy-hang \
Mark Wielaard ebed60b
 	bar_trivial.vgtest bar_trivial.stdout.exp bar_trivial.stderr.exp \
Mark Wielaard ebed60b
 	free_is_write.vgtest free_is_write.stdout.exp \
Mark Wielaard ebed60b
 		free_is_write.stderr.exp \
Mark Wielaard ebed60b
diff --git a/helgrind/tests/bar_bad.c b/helgrind/tests/bar_bad.c
Mark Wielaard ebed60b
index dd6079c..424ae2f 100644
Mark Wielaard ebed60b
--- a/helgrind/tests/bar_bad.c
Mark Wielaard ebed60b
+++ b/helgrind/tests/bar_bad.c
Mark Wielaard ebed60b
@@ -15,23 +15,27 @@ void* child1 ( void* arg )
Mark Wielaard ebed60b
    return NULL;
Mark Wielaard ebed60b
 }
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
+void *sleep1 ( void* arg )
Mark Wielaard ebed60b
+{
Mark Wielaard ebed60b
+   /* Long sleep, we hope to never trigger. */
Mark Wielaard ebed60b
+   sleep (6);
Mark Wielaard ebed60b
+   pthread_barrier_wait ( (pthread_barrier_t*)arg );
Mark Wielaard ebed60b
+   return NULL;
Mark Wielaard ebed60b
+}
Mark Wielaard ebed60b
+
Mark Wielaard ebed60b
+void *exit1 ( void* arg )
Mark Wielaard ebed60b
+{
Mark Wielaard ebed60b
+   /* Sleep a bit, then exit, we are done. */
Mark Wielaard ebed60b
+   sleep (1);
Mark Wielaard ebed60b
+   exit (0);
Mark Wielaard ebed60b
+   return NULL;
Mark Wielaard ebed60b
+}
Mark Wielaard ebed60b
+
Mark Wielaard ebed60b
 int main ( void )
Mark Wielaard ebed60b
 {
Mark Wielaard ebed60b
   pthread_barrier_t *bar1, *bar2, *bar3, *bar4, *bar5;
Mark Wielaard ebed60b
-  pthread_t thr1, thr2;
Mark Wielaard ebed60b
   int r;
Mark Wielaard ebed60b
-
Mark Wielaard ebed60b
-  /* possibly set up a watchdog timer thread here. */
Mark Wielaard ebed60b
-
Mark Wielaard ebed60b
-
Mark Wielaard ebed60b
-
Mark Wielaard ebed60b
-
Mark Wielaard ebed60b
-
Mark Wielaard ebed60b
-
Mark Wielaard ebed60b
-
Mark Wielaard ebed60b
-
Mark Wielaard ebed60b
-
Mark Wielaard ebed60b
-
Mark Wielaard ebed60b
+  pthread_t thr1, thr2, slp1, slp2, ext1;
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
   /* initialise a barrier with a zero count */
Mark Wielaard ebed60b
   fprintf(stderr, "\ninitialise a barrier with zero count\n");
Mark Wielaard ebed60b
@@ -49,6 +53,9 @@ int main ( void )
Mark Wielaard ebed60b
   fprintf(stderr, "\ninitialise a barrier which has threads waiting on it\n");
Mark Wielaard ebed60b
   bar3 = malloc(sizeof(pthread_barrier_t));
Mark Wielaard ebed60b
   pthread_barrier_init(bar3, NULL, 2);
Mark Wielaard ebed60b
+  /* create a thread, whose purpose is to "unblock" the barrier after
Mark Wielaard ebed60b
+     some sleeping in case it keeps being blocked.  */
Mark Wielaard ebed60b
+  pthread_create(&slp1, NULL, sleep1, (void*)bar3);
Mark Wielaard ebed60b
   /* create a thread, whose only purpose is to block on the barrier */
Mark Wielaard ebed60b
   pthread_create(&thr1, NULL, child1, (void*)bar3);
Mark Wielaard ebed60b
   /* guarantee that it gets there first */
Mark Wielaard ebed60b
@@ -61,6 +68,12 @@ int main ( void )
Mark Wielaard ebed60b
   /* once again, create a thread, whose only purpose is to block. */
Mark Wielaard ebed60b
   bar4 = malloc(sizeof(pthread_barrier_t));
Mark Wielaard ebed60b
   pthread_barrier_init(bar4, NULL, 2);
Mark Wielaard ebed60b
+  /* create a thread, whose purpose is to "unblock" the barrier after
Mark Wielaard ebed60b
+     some sleeping in case it keeps being blocked. We hope it isn't
Mark Wielaard ebed60b
+     needed, but if it is, because pthread_barier_destroy hangs
Mark Wielaard ebed60b
+     and we will get an extra warning about the barrier being already
Mark Wielaard ebed60b
+     destroyed. */
Mark Wielaard ebed60b
+  pthread_create(&slp2, NULL, sleep1, (void*)bar4);
Mark Wielaard ebed60b
   /* create a thread, whose only purpose is to block on the barrier */
Mark Wielaard ebed60b
   pthread_create(&thr2, NULL, child1, (void*)bar4);
Mark Wielaard ebed60b
   /* guarantee that it gets there first */
Mark Wielaard ebed60b
@@ -70,13 +83,16 @@ int main ( void )
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
   /* destroy a barrier that was never initialised.  This is a bit
Mark Wielaard ebed60b
      tricky, in that we have to fill the barrier with bytes which
Mark Wielaard ebed60b
-     ensure that the pthread_barrier_destroy call doesn't hang for
Mark Wielaard ebed60b
-     some reason.  Zero-fill seems to work ok on amd64-linux (glibc
Mark Wielaard ebed60b
+     ensure that the pthread_barrier_destroy call doesn't crash for
Mark Wielaard ebed60b
+     some reason.  One-fill seems to work ok on amd64-linux (glibc
Mark Wielaard ebed60b
      2.8). */
Mark Wielaard ebed60b
   fprintf(stderr, "\ndestroy a barrier that was never initialised\n");
Mark Wielaard ebed60b
+  /* Create a thread that just exits the process after some sleep.
Mark Wielaard ebed60b
+     We are really done at this point, even if we hang. */
Mark Wielaard ebed60b
+  pthread_create(&ext1, NULL, exit1, NULL);
Mark Wielaard ebed60b
   bar5 = malloc(sizeof(pthread_barrier_t));
Mark Wielaard ebed60b
   assert(bar5);
Mark Wielaard ebed60b
-  memset(bar5, 0, sizeof(*bar5));
Mark Wielaard ebed60b
+  memset(bar5, 1, sizeof(*bar5));
Mark Wielaard ebed60b
   pthread_barrier_destroy(bar5);
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
   /* now we need to clean up the mess .. */
Mark Wielaard ebed60b
@@ -85,5 +101,6 @@ int main ( void )
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
   free(bar1); free(bar2); free(bar3); free(bar4); free(bar5);
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
-  return 0;
Mark Wielaard ebed60b
+  /* Use exit, we want to kill any "sleeper threads". */
Mark Wielaard ebed60b
+  exit (0);
Mark Wielaard ebed60b
 }
Mark Wielaard ebed60b
diff --git a/helgrind/tests/bar_bad.stderr.exp b/helgrind/tests/bar_bad.stderr.exp
Mark Wielaard ebed60b
index 74af4fa..d0901b2 100644
Mark Wielaard ebed60b
--- a/helgrind/tests/bar_bad.stderr.exp
Mark Wielaard ebed60b
+++ b/helgrind/tests/bar_bad.stderr.exp
Mark Wielaard ebed60b
@@ -8,14 +8,14 @@ Thread #x is the program's root thread
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 Thread #x: pthread_barrier_init: 'count' argument is zero
Mark Wielaard ebed60b
    at 0x........: pthread_barrier_init (hg_intercepts.c:...)
Mark Wielaard ebed60b
-   by 0x........: main (bar_bad.c:39)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:43)
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 ----------------------------------------------------------------
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 Thread #x's call to pthread_barrier_init failed
Mark Wielaard ebed60b
    with error code 22 (EINVAL: Invalid argument)
Mark Wielaard ebed60b
    at 0x........: pthread_barrier_init (hg_intercepts.c:...)
Mark Wielaard ebed60b
-   by 0x........: main (bar_bad.c:39)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:43)
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 initialise a barrier twice
Mark Wielaard ebed60b
@@ -23,7 +23,7 @@ initialise a barrier twice
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 Thread #x: pthread_barrier_init: barrier is already initialised
Mark Wielaard ebed60b
    at 0x........: pthread_barrier_init (hg_intercepts.c:...)
Mark Wielaard ebed60b
-   by 0x........: main (bar_bad.c:45)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:49)
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 initialise a barrier which has threads waiting on it
Mark Wielaard ebed60b
@@ -31,13 +31,13 @@ initialise a barrier which has threads waiting on it
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 Thread #x: pthread_barrier_init: barrier is already initialised
Mark Wielaard ebed60b
    at 0x........: pthread_barrier_init (hg_intercepts.c:...)
Mark Wielaard ebed60b
-   by 0x........: main (bar_bad.c:57)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:64)
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 ----------------------------------------------------------------
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 Thread #x: pthread_barrier_init: threads are waiting at barrier
Mark Wielaard ebed60b
    at 0x........: pthread_barrier_init (hg_intercepts.c:...)
Mark Wielaard ebed60b
-   by 0x........: main (bar_bad.c:57)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:64)
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 destroy a barrier that has waiting threads
Mark Wielaard ebed60b
@@ -45,14 +45,14 @@ destroy a barrier that has waiting threads
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 Thread #x: pthread_barrier_destroy: threads are waiting at barrier
Mark Wielaard ebed60b
    at 0x........: pthread_barrier_destroy (hg_intercepts.c:...)
Mark Wielaard ebed60b
-   by 0x........: main (bar_bad.c:69)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:82)
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 ----------------------------------------------------------------
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 Thread #x's call to pthread_barrier_destroy failed
Mark Wielaard ebed60b
    with error code 16 (EBUSY: Device or resource busy)
Mark Wielaard ebed60b
    at 0x........: pthread_barrier_destroy (hg_intercepts.c:...)
Mark Wielaard ebed60b
-   by 0x........: main (bar_bad.c:69)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:82)
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 destroy a barrier that was never initialised
Mark Wielaard ebed60b
@@ -60,5 +60,5 @@ destroy a barrier that was never initialised
Mark Wielaard ebed60b
 
Mark Wielaard ebed60b
 Thread #x: pthread_barrier_destroy: barrier was never initialised
Mark Wielaard ebed60b
    at 0x........: pthread_barrier_destroy (hg_intercepts.c:...)
Mark Wielaard ebed60b
-   by 0x........: main (bar_bad.c:80)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:96)
Mark Wielaard ebed60b
 
Mark Wielaard b8858a0
diff --git a/helgrind/tests/bar_bad.stderr.exp-destroy-hang b/helgrind/tests/bar_bad.stderr.exp-destroy-hang
Mark Wielaard b8858a0
new file mode 100644
Mark Wielaard b8858a0
index 0000000..ddf5624
Mark Wielaard b8858a0
--- /dev/null
Mark Wielaard ebed60b
+++ b/helgrind/tests/bar_bad.stderr.exp-destroy-hang
Mark Wielaard b8858a0
@@ -0,0 +1,72 @@
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+initialise a barrier with zero count
Mark Wielaard b8858a0
+---Thread-Announcement------------------------------------------
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+Thread #x is the program's root thread
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+----------------------------------------------------------------
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+Thread #x: pthread_barrier_init: 'count' argument is zero
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_init (hg_intercepts.c:...)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:43)
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+----------------------------------------------------------------
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+Thread #x's call to pthread_barrier_init failed
Mark Wielaard b8858a0
+   with error code 22 (EINVAL: Invalid argument)
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_init (hg_intercepts.c:...)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:43)
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+initialise a barrier twice
Mark Wielaard b8858a0
+----------------------------------------------------------------
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+Thread #x: pthread_barrier_init: barrier is already initialised
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_init (hg_intercepts.c:...)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:49)
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+initialise a barrier which has threads waiting on it
Mark Wielaard b8858a0
+----------------------------------------------------------------
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+Thread #x: pthread_barrier_init: barrier is already initialised
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_init (hg_intercepts.c:...)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:64)
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+----------------------------------------------------------------
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+Thread #x: pthread_barrier_init: threads are waiting at barrier
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_init (hg_intercepts.c:...)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:64)
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+destroy a barrier that has waiting threads
Mark Wielaard b8858a0
+----------------------------------------------------------------
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+Thread #x: pthread_barrier_destroy: threads are waiting at barrier
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_destroy (hg_intercepts.c:...)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:82)
Mark Wielaard ebed60b
+
Mark Wielaard ebed60b
+---Thread-Announcement------------------------------------------
Mark Wielaard ebed60b
+
Mark Wielaard ebed60b
+Thread #x was created
Mark Wielaard ebed60b
+   ...
Mark Wielaard ebed60b
+   by 0x........: pthread_create@* (hg_intercepts.c:...)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:76)
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+----------------------------------------------------------------
Mark Wielaard b8858a0
+
Mark Wielaard ebed60b
+Thread #x: pthread_barrier_wait: barrier is uninitialised
Mark Wielaard ebed60b
+   at 0x........: pthread_barrier_wait (hg_intercepts.c:...)
Mark Wielaard ebed60b
+   by 0x........: sleep1 (bar_bad.c:22)
Mark Wielaard ebed60b
+   by 0x........: mythread_wrapper (hg_intercepts.c:...)
Mark Wielaard ebed60b
+   ...
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+destroy a barrier that was never initialised
Mark Wielaard b8858a0
+----------------------------------------------------------------
Mark Wielaard b8858a0
+
Mark Wielaard b8858a0
+Thread #x: pthread_barrier_destroy: barrier was never initialised
Mark Wielaard b8858a0
+   at 0x........: pthread_barrier_destroy (hg_intercepts.c:...)
Mark Wielaard ebed60b
+   by 0x........: main (bar_bad.c:96)
Mark Wielaard b8858a0
+
Mark Wielaard 18305ed
diff -ur valgrind-3.11.0.orig/drd/tests/Makefile.in valgrind-3.11.0/drd/tests/Makefile.in
Mark Wielaard 18305ed
--- valgrind-3.11.0.orig/drd/tests/Makefile.in	2016-01-25 21:16:13.095563405 +0100
Mark Wielaard 18305ed
+++ valgrind-3.11.0/drd/tests/Makefile.in	2016-01-25 21:17:33.386330569 +0100
Mark Wielaard 18305ed
@@ -1084,8 +1084,10 @@
Mark Wielaard 18305ed
 	atomic_var.stderr.exp			    \
Mark Wielaard 18305ed
 	atomic_var.vgtest			    \
Mark Wielaard 18305ed
 	bar_bad.stderr.exp			    \
Mark Wielaard 18305ed
+	bar_bad.stderr.exp-nohang		    \
Mark Wielaard 18305ed
 	bar_bad.vgtest				    \
Mark Wielaard 18305ed
 	bar_bad_xml.stderr.exp			    \
Mark Wielaard 18305ed
+	bar_bad_xml.stderr.exp-nohang		    \
Mark Wielaard 18305ed
 	bar_bad_xml.vgtest			    \
Mark Wielaard 18305ed
 	bar_trivial.stderr.exp			    \
Mark Wielaard 18305ed
 	bar_trivial.stdout.exp			    \
Mark Wielaard 18305ed
diff -ur valgrind-3.11.0.orig/helgrind/tests/Makefile.in valgrind-3.11.0/helgrind/tests/Makefile.in
Mark Wielaard 18305ed
--- valgrind-3.11.0.orig/helgrind/tests/Makefile.in	2016-01-25 21:16:12.883564020 +0100
Mark Wielaard 18305ed
+++ valgrind-3.11.0/helgrind/tests/Makefile.in	2016-01-25 21:17:34.266328017 +0100
Mark Wielaard 18305ed
@@ -835,6 +835,7 @@
Mark Wielaard 18305ed
 	cond_timedwait_test.vgtest cond_timedwait_test.stdout.exp \
Mark Wielaard 18305ed
 		cond_timedwait_test.stderr.exp \
Mark Wielaard 18305ed
 	bar_bad.vgtest bar_bad.stdout.exp bar_bad.stderr.exp \
Mark Wielaard 18305ed
+		bar_bad.stderr.exp-destroy-hang \
Mark Wielaard 18305ed
 	bar_trivial.vgtest bar_trivial.stdout.exp bar_trivial.stderr.exp \
Mark Wielaard 18305ed
 	free_is_write.vgtest free_is_write.stdout.exp \
Mark Wielaard 18305ed
 		free_is_write.stderr.exp \