Hello

Running the latest valgrind on the Subversion executables generates
errors that are caused by APR.

==4022== pthread_mutex_unlock: mutex is not locked
==4022==    at 0x404EE4BF: (within /usr/lib/valgrind/libpthread.so)
==4022==    by 0x403B7043: thread_mutex_cleanup (thread_mutex.c:67)
==4022==    by 0x403B9CD2: run_cleanups (apr_pools.c:1940)
==4022==    by 0x403B93B9: pool_clear_debug (apr_pools.c:1361)

These are caused by the Unix implementation of thread_mutex_cleanup
calling pthread_mutex_unlock when a mutex is destroyed.

APR does not use anything like PTHREAD_MUTEX_ERRORCHECK.  It is
strictly undefined to call pthread_mutex_unlock on a mutex that is not
locked, or to call pthread_mutex_unlock on a mutex that is locked by
another thread.

Attempting to unlock an unlocked mutex is probably harmless on some
(all?) pthread implementations, but I don't think it's good practice
to do it.  What benefit can there be?  If there is a reason for doing
it, then such use of undefined behaviour should be documented.  As it
currently stands, an application that quite properly ensures that its
mutexes are not in use when they are destroyed unwittingly invokes
undefined behaviour.

-- 
Philip

Reply via email to