]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Merged trunk revisions 9851, 9852 and 9986: fixed DRD assertion failure triggered...
authorBart Van Assche <bvanassche@acm.org>
Tue, 19 May 2009 17:54:29 +0000 (17:54 +0000)
committerBart Van Assche <bvanassche@acm.org>
Tue, 19 May 2009 17:54:29 +0000 (17:54 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/branches/VALGRIND_3_4_BRANCH@9987

drd/drd_mutex.c
drd/tests/Makefile.am
drd/tests/pth_mutex_reinit.c [new file with mode: 0644]
drd/tests/pth_mutex_reinit.stderr.exp [new file with mode: 0644]
drd/tests/pth_mutex_reinit.vgtest [new file with mode: 0644]

index c3e7b4e1f2184ea0253405b84f3c858d34bf7790..fc3b8af14a116ef03df0642a552ee3c4ad760016 100644 (file)
@@ -189,6 +189,7 @@ mutex_init(const Addr mutex, const MutexT mutex_type)
                             VG_(get_IP)(vg_tid),
                             "Mutex reinitialization",
                             &MEI);
+    p->mutex_type = mutex_type;
     return p;
   }
   p = mutex_get_or_allocate(mutex, mutex_type);
index 8033dd6e70a943f9c49752244a5217d25475a4e3..d123d4bfdc67bcff8fbe732c9869445b8c73db40 100644 (file)
@@ -22,8 +22,8 @@ EXTRA_DIST =                                        \
        atomic_var.vgtest                           \
        bar_bad.stderr.exp                          \
        bar_bad.vgtest                              \
-       bar_trivial.stdout.exp                      \
        bar_trivial.stderr.exp                      \
+       bar_trivial.stdout.exp                      \
        bar_trivial.vgtest                          \
        boost_thread.stderr.exp                     \
        boost_thread.vgtest                         \
@@ -109,8 +109,10 @@ EXTRA_DIST =                                        \
        pth_detached_sem.vgtest                     \
        pth_inconsistent_cond_wait.stderr.exp       \
        pth_inconsistent_cond_wait.vgtest           \
-       pth_process_shared_mutex.vgtest             \
+       pth_mutex_reinit.stderr.exp                 \
+       pth_mutex_reinit.vgtest                     \
        pth_process_shared_mutex.stderr.exp         \
+       pth_process_shared_mutex.vgtest             \
        pth_spinlock.stderr.exp                     \
        pth_spinlock.vgtest                         \
        qt4_mutex.stderr.exp                        \
@@ -230,8 +232,9 @@ check_PROGRAMS =      \
   pth_create_chain    \
   pth_detached        \
   pth_detached_sem    \
-  pth_process_shared_mutex   \
   pth_inconsistent_cond_wait \
+  pth_mutex_reinit    \
+  pth_process_shared_mutex   \
   pth_spinlock        \
   recursive_mutex     \
   rwlock_race         \
@@ -357,6 +360,9 @@ pth_detached_sem_LDADD      = -lpthread
 pth_inconsistent_cond_wait_SOURCES = pth_inconsistent_cond_wait.c
 pth_inconsistent_cond_wait_LDADD   = -lpthread
 
+pth_mutex_reinit_SOURCES    = pth_mutex_reinit.c
+pth_mutex_reinit_LDADD      = -lpthread
+
 pth_process_shared_mutex_SOURCES = pth_process_shared_mutex.c
 pth_process_shared_mutex_LDADD   = -lpthread
 
diff --git a/drd/tests/pth_mutex_reinit.c b/drd/tests/pth_mutex_reinit.c
new file mode 100644 (file)
index 0000000..1c72e81
--- /dev/null
@@ -0,0 +1,36 @@
+/* Test program that triggers mutex reinitialization. */
+
+
+#define _GNU_SOURCE
+
+#include <assert.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+
+int main(int argc, char** argv)
+{
+  pthread_mutex_t m;
+  pthread_mutexattr_t attr;
+
+  pthread_mutexattr_init(&attr);
+  pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL);
+  pthread_mutex_init(&m, &attr);
+  pthread_mutexattr_destroy(&attr);
+  pthread_mutex_lock(&m);
+  pthread_mutex_unlock(&m);
+
+  pthread_mutexattr_init(&attr);
+  pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
+  pthread_mutex_init(&m, &attr);
+  pthread_mutexattr_destroy(&attr);
+  pthread_mutex_lock(&m);
+  pthread_mutex_unlock(&m);
+
+  pthread_mutex_destroy(&m);
+
+  fprintf(stderr, "Done.\n");
+
+  return 0;
+}
diff --git a/drd/tests/pth_mutex_reinit.stderr.exp b/drd/tests/pth_mutex_reinit.stderr.exp
new file mode 100644 (file)
index 0000000..b8ad85e
--- /dev/null
@@ -0,0 +1,10 @@
+
+Mutex reinitialization: mutex 0x........, recursion count 0, owner 1.
+   at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+   by 0x........: main (pth_mutex_reinit.c:?)
+mutex 0x........ was first observed at:
+   at 0x........: pthread_mutex_init (drd_pthread_intercepts.c:?)
+   by 0x........: main (pth_mutex_reinit.c:?)
+Done.
+
+ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/pth_mutex_reinit.vgtest b/drd/tests/pth_mutex_reinit.vgtest
new file mode 100644 (file)
index 0000000..df78455
--- /dev/null
@@ -0,0 +1,3 @@
+prereq: test -e pth_mutex_reinit && ./supported_libpthread
+vgopts: --var-info=yes --check-stack-var=yes
+prog: pth_mutex_reinit