/** @note The function mutex_type() has been declared inline in order
* to avoid that it shows up in call stacks.
+ * @note glibc stores the mutex type in the lowest two bits, and uses the
+ * higher bits for flags like PTHREAD_MUTEXATTR_FLAG_ROBUST and
+ * PTHREAD_MUTEXATTR_FLAG_PSHARED.
*/
static __inline__ MutexT mutex_type(pthread_mutex_t* mutex)
{
#if defined(HAVE_PTHREAD_MUTEX_T__M_KIND)
/* LinuxThreads. */
- const int kind = mutex->__m_kind;
+ const int kind = mutex->__m_kind & 3;
#elif defined(HAVE_PTHREAD_MUTEX_T__DATA__KIND)
/* NPTL. */
- const int kind = mutex->__data.__kind;
+ const int kind = mutex->__data.__kind & 3;
#else
/* Another POSIX threads implementation. Regression tests will fail. */
const int kind = PTHREAD_MUTEX_DEFAULT;
pth_detached_sem.vgtest \
pth_inconsistent_cond_wait.stderr.exp \
pth_inconsistent_cond_wait.vgtest \
+ pth_process_shared_mutex.vgtest \
+ pth_process_shared_mutex.c \
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_spinlock \
recursive_mutex \
pth_inconsistent_cond_wait_SOURCES = pth_inconsistent_cond_wait.c
pth_inconsistent_cond_wait_LDADD = -lpthread
+pth_process_shared_mutex_SOURCES = pth_process_shared_mutex.c
+pth_process_shared_mutex_LDADD = -lpthread
+
pth_spinlock_SOURCES = pth_spinlock.c
pth_spinlock_LDADD = -lpthread
--- /dev/null
+/*
+ * Test program that locks and unlocks a process-shared mutex.
+ * See also https://bugs.kde.org/show_bug.cgi?id=187048.
+ */
+
+
+#define _GNU_SOURCE
+
+#include <stdio.h>
+#include <pthread.h>
+
+
+int main()
+{
+ pthread_mutex_t mutex;
+ pthread_mutexattr_t attr;
+
+ pthread_mutexattr_init(&attr);
+ pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
+ pthread_mutex_init(&mutex, &attr);
+ pthread_mutexattr_destroy(&attr);
+
+ pthread_mutex_lock(&mutex);
+ pthread_mutex_unlock(&mutex);
+ pthread_mutex_destroy(&mutex);
+
+ fprintf(stderr, "Finished.\n");
+
+ return 0;
+}
--- /dev/null
+
+Finished.
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
--- /dev/null
+prereq: ./supported_libpthread
+prog: pth_process_shared_mutex
+vgopts: --var-info=yes --check-stack-var=yes
at 0x........: pthread_mutex_destroy (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:102)
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:116)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_timedlock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:121)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-
-The object at address 0x........ is not a mutex.
+Mutex not locked: mutex 0x........, recursion count 0, owner 0.
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
mutex 0x........ was first observed at:
Destroying locked mutex: mutex 0x........, recursion count 1, owner 1.
at 0x........: main (tc20_verifywrap.c:262)
-ERROR SUMMARY: 16 errors from 16 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 13 errors from 13 contexts (suppressed: 0 from 0)
at 0x........: pthread_mutex_destroy (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:102)
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:116)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_timedlock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:121)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-
-The object at address 0x........ is not a mutex.
+Mutex not locked: mutex 0x........, recursion count 0, owner 0.
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
mutex 0x........ was first observed at:
Destroying locked rwlock: rwlock 0x.........
at 0x........: main (tc20_verifywrap.c:262)
-ERROR SUMMARY: 16 errors from 16 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 13 errors from 13 contexts (suppressed: 0 from 0)
at 0x........: pthread_mutex_destroy (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:102)
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:116)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_timedlock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:121)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-
-The object at address 0x........ is not a mutex.
+Mutex not locked: mutex 0x........, recursion count 0, owner 0.
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
mutex 0x........ was first observed at:
Destroying locked mutex: mutex 0x........, recursion count 1, owner 1.
at 0x........: main (tc20_verifywrap.c:262)
-[1/1] mutex_destroy invalid mutex 0x........ rc 0 owner 0
+[1/1] mutex_destroy mutex 0x........ rc 0 owner 0
[1/1] mutex_trylock recursive mutex 0x........ rc 0 owner 0
[1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 0
[1/1] mutex_unlock recursive mutex 0x........ rc 1
Destroying locked mutex: mutex 0x........, recursion count 1, owner 1.
at 0x........: main (tc20_verifywrap.c:262)
-[1/1] mutex_destroy invalid mutex 0x........ rc 0 owner 0
+[1/1] mutex_destroy mutex 0x........ rc 0 owner 0
[1/1] mutex_trylock recursive mutex 0x........ rc 0 owner 0
[1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 0
[1/1] mutex_unlock recursive mutex 0x........ rc 1
Destroying locked mutex: mutex 0x........, recursion count 1, owner 1.
at 0x........: pthread_mutex_destroy (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:102)
-[1/1] mutex_trylock invalid mutex 0x........ rc 0 owner 0
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
-[1/1] pre_mutex_lock invalid mutex 0x........ rc 0 owner 0
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:116)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
-[1/1] mutex_trylock invalid mutex 0x........ rc 0 owner 0
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_timedlock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:121)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
-[1/1] mutex_unlock invalid mutex 0x........ rc 0
+[1/1] mutex_trylock mutex 0x........ rc 0 owner 0
+[1/1] post_mutex_lock mutex 0x........ rc 0 owner 0 (locking failed)
+[1/1] pre_mutex_lock mutex 0x........ rc 0 owner 0
+[1/1] post_mutex_lock mutex 0x........ rc 0 owner 0 (locking failed)
+[1/1] mutex_trylock mutex 0x........ rc 0 owner 0
+[1/1] post_mutex_lock mutex 0x........ rc 0 owner 0 (locking failed)
+[1/1] mutex_unlock mutex 0x........ rc 0
-The object at address 0x........ is not a mutex.
+Mutex not locked: mutex 0x........, recursion count 0, owner 0.
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
mutex 0x........ was first observed at:
Destroying locked mutex: mutex 0x........, recursion count 1, owner 1.
at 0x........: main (tc20_verifywrap.c:262)
-[1/1] mutex_destroy invalid mutex 0x........ rc 0 owner 0
+[1/1] mutex_destroy mutex 0x........ rc 0 owner 0
[1/1] mutex_trylock recursive mutex 0x........ rc 0 owner 0
[1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 0
[1/1] mutex_unlock recursive mutex 0x........ rc 1
[1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
[1/1] mutex_unlock recursive mutex 0x........ rc 1
-ERROR SUMMARY: 16 errors from 16 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 13 errors from 13 contexts (suppressed: 0 from 0)
Destroying locked mutex: mutex 0x........, recursion count 1, owner 1.
at 0x........: pthread_mutex_destroy (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:102)
-[1/1] mutex_trylock invalid mutex 0x........ rc 0 owner 0
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
-[1/1] pre_mutex_lock invalid mutex 0x........ rc 0 owner 0
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:116)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
-[1/1] mutex_trylock invalid mutex 0x........ rc 0 owner 0
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_timedlock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:121)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
-[1/1] mutex_unlock invalid mutex 0x........ rc 0
+[1/1] mutex_trylock mutex 0x........ rc 0 owner 0
+[1/1] post_mutex_lock mutex 0x........ rc 0 owner 0 (locking failed)
+[1/1] pre_mutex_lock mutex 0x........ rc 0 owner 0
+[1/1] post_mutex_lock mutex 0x........ rc 0 owner 0 (locking failed)
+[1/1] mutex_trylock mutex 0x........ rc 0 owner 0
+[1/1] post_mutex_lock mutex 0x........ rc 0 owner 0 (locking failed)
+[1/1] mutex_unlock mutex 0x........ rc 0
-The object at address 0x........ is not a mutex.
+Mutex not locked: mutex 0x........, recursion count 0, owner 0.
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
mutex 0x........ was first observed at:
------------ dealloc of mem holding locks ------------
-[1/1] mutex_destroy invalid mutex 0x........ rc 0 owner 0
+[1/1] mutex_destroy mutex 0x........ rc 0 owner 0
[1/1] mutex_destroy error checking mutex 0x........ rc 1 owner 1
Destroying locked mutex: mutex 0x........, recursion count 1, owner 1.
[1/1] post_mutex_lock recursive mutex 0x........ rc 0 owner 1
[1/1] mutex_unlock recursive mutex 0x........ rc 1
-ERROR SUMMARY: 16 errors from 16 contexts (suppressed: 0 from 0)
+ERROR SUMMARY: 13 errors from 13 contexts (suppressed: 0 from 0)
Destroying locked mutex: mutex 0x........, recursion count 1, owner 1.
at 0x........: pthread_mutex_destroy (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:102)
-[1/1] mutex_trylock invalid mutex 0x........ rc 0 owner 0
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
-[1/1] pre_mutex_lock invalid mutex 0x........ rc 0 owner 0
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_trylock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:116)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
-[1/1] mutex_trylock invalid mutex 0x........ rc 0 owner 0
-
-The object at address 0x........ is not a mutex.
- at 0x........: pthread_mutex_timedlock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:121)
-mutex 0x........ was first observed at:
- at 0x........: pthread_mutex_lock (drd_pthread_intercepts.c:?)
- by 0x........: main (tc20_verifywrap.c:108)
-[1/1] post_mutex_lock invalid mutex 0x........ rc 0 owner 0 (locking failed)
-[1/1] mutex_unlock invalid mutex 0x........ rc 0
+[1/1] mutex_trylock mutex 0x........ rc 0 owner 0
+[1/1] post_mutex_lock mutex 0x........ rc 0 owner 0 (locking failed)
+[1/1] pre_mutex_lock mutex 0x........ rc 0 owner 0
+[1/1] post_mutex_lock mutex 0x........ rc 0 owner 0 (locking failed)
+[1/1] mutex_trylock mutex 0x........ rc 0 owner 0
+[1/1] post_mutex_lock mutex 0x........ rc 0 owner 0 (locking failed)
+[1/1] mutex_unlock mutex 0x........ rc 0
-The object at address 0x........ is not a mutex.
+Mutex not locked: mutex 0x........, recursion count 0, owner 0.
at 0x........: pthread_mutex_unlock (drd_pthread_intercepts.c:?)
by 0x........: main (tc20_verifywrap.c:125)
mutex 0x........ was first observed at: