------ This is output for >= glibc 2.4 ------ ---------------- pthread_create/join ---------------- ---Thread-Announcement------------------------------------------ Thread #x is the program's root thread ---Thread-Announcement------------------------------------------ Thread #x was created ... by 0x........: pthread_create_WRK (hg_intercepts.c:...) by 0x........: pthread_create@* (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:76) ---------------------------------------------------------------- Possible data race during write of size 2 at 0x........ by thread #x Locks held: none at 0x........: main (tc20_verifywrap.c:78) This conflicts with a previous write of size 2 by thread #x Locks held: none at 0x........: racy_child (tc20_verifywrap.c:34) by 0x........: mythread_wrapper (hg_intercepts.c:...) ... Location 0x........ is 0 bytes inside global var "unprotected" declared at tc20_verifywrap.c:27 ---------------------------------------------------------------- Thread #x's call to pthread_join failed with error code 35 (EDEADLK: Resource deadlock would occur) at 0x........: pthread_join_WRK (hg_intercepts.c:...) by 0x........: pthread_join (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:83) ---------------- pthread_mutex_lock et al ---------------- ---------------------------------------------------------------- Thread #x's call to pthread_mutex_init failed with error code 95 (EOPNOTSUPP: Operation not supported on transport endpoint) at 0x........: pthread_mutex_init (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:92) ---------------------------------------------------------------- Thread #x: pthread_mutex_destroy of a locked mutex at 0x........: pthread_mutex_destroy (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:102) ---------------------------------------------------------------- Thread #x's call to pthread_mutex_destroy failed with error code 16 (EBUSY: Device or resource busy) at 0x........: pthread_mutex_destroy (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:102) ---------------------------------------------------------------- Thread #x's call to pthread_mutex_lock failed with error code 22 (EINVAL: Invalid argument) at 0x........: pthread_mutex_lock (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:108) ---------------------------------------------------------------- Thread #x's call to pthread_mutex_trylock failed with error code 22 (EINVAL: Invalid argument) at 0x........: pthread_mutex_trylock (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:116) ---------------------------------------------------------------- Thread #x's call to pthread_mutex_timedlock failed with error code 22 (EINVAL: Invalid argument) at 0x........: pthread_mutex_timedlock (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:121) ---------------------------------------------------------------- Thread #x unlocked an invalid lock at 0x........ at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:125) ---------------------------------------------------------------- Thread #x's call to pthread_mutex_unlock failed with error code 22 (EINVAL: Invalid argument) at 0x........: pthread_mutex_unlock (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:125) ---------------- pthread_cond_wait et al ---------------- ---------------------------------------------------------------- Thread #x: pthread_cond_{timed}wait called with un-held mutex at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...) by 0x........: pthread_cond_wait@* (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:147) ---------------------------------------------------------------- Thread #x's call to pthread_cond_wait failed with error code 1 (EPERM: Operation not permitted) at 0x........: pthread_cond_wait_WRK (hg_intercepts.c:...) by 0x........: pthread_cond_wait@* (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:147) ---------------------------------------------------------------- Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread at 0x........: pthread_cond_signal_WRK (hg_intercepts.c:...) by 0x........: pthread_cond_signal@* (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:152) FIXME: can't figure out how to verify wrap of pthread_cond_signal ---------------------------------------------------------------- Thread #x: pthread_cond_{signal,broadcast}: dubious: associated lock is not held by any thread at 0x........: pthread_cond_broadcast_WRK (hg_intercepts.c:...) by 0x........: pthread_cond_broadcast@* (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:158) FIXME: can't figure out how to verify wrap of pthread_broadcast_signal ---------------------------------------------------------------- Thread #x: pthread_cond_{timed}wait called with un-held mutex at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:165) ---------------------------------------------------------------- Thread #x's call to pthread_cond_timedwait failed with error code 22 (EINVAL: Invalid argument) at 0x........: pthread_cond_timedwait_WRK (hg_intercepts.c:...) by 0x........: pthread_cond_timedwait@* (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:165) ---------------- pthread_rwlock_* ---------------- ---------------------------------------------------------------- Thread #x unlocked a not-locked lock at 0x........ at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:179) Lock at 0x........ was first observed at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) by 0x........: pthread_rwlock_init (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:178) (1) no error on next line (2) no error on next line (3) ERROR on next line ---------------------------------------------------------------- Thread #x unlocked a not-locked lock at 0x........ at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:196) Lock at 0x........ was first observed at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) by 0x........: pthread_rwlock_init (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:186) (4) no error on next line (5) no error on next line (6) no error on next line (7) no error on next line (8) ERROR on next line ---------------------------------------------------------------- Thread #x unlocked a not-locked lock at 0x........ at 0x........: pthread_rwlock_unlock_WRK (hg_intercepts.c:...) by 0x........: pthread_rwlock_unlock (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:212) Lock at 0x........ was first observed at 0x........: pthread_rwlock_init_WRK (hg_intercepts.c:...) by 0x........: pthread_rwlock_init (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:186) ---------------- sem_* ---------------- ---------------------------------------------------------------- Thread #x's call to sem_init failed with error code 22 (EINVAL: Invalid argument) at 0x........: sem_init_WRK (hg_intercepts.c:...) by 0x........: sem_init@* (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:228) FIXME: can't figure out how to verify wrap of sem_destroy ---------------------------------------------------------------- Thread #x: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post at 0x........: sem_wait_WRK (hg_intercepts.c:...) by 0x........: sem_wait (hg_intercepts.c:...) by 0x........: main (tc20_verifywrap.c:242) FIXME: can't figure out how to verify wrap of sem_post ------------ dealloc of mem holding locks ------------ ---------------------------------------------------------------- Thread #x: Exiting thread still holds 1 lock ... ERROR SUMMARY: 22 errors from 22 contexts (suppressed: 0 from 0)