VG_(get_IP)(vg_tid),
"Mutex reinitialization",
&MEI);
+ p->mutex_type = mutex_type;
return p;
}
p = mutex_get_or_allocate(mutex, mutex_type);
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 \
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 \
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 \
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
--- /dev/null
+/* 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;
+}
--- /dev/null
+
+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)
--- /dev/null
+prereq: test -e pth_mutex_reinit && ./supported_libpthread
+vgopts: --var-info=yes --check-stack-var=yes
+prog: pth_mutex_reinit