Not setting the return code from pthread_mutexattr_setrobust_np() is likely the fix for interoperability with glibc/kernel that does not support robust mutexes but does define EOWNERDEAD:
+#if defined(EOWNERDEAD) RET_SET((pthread_mutexattr_init(&mutexattr)), ret); + if (ret == 0) { + RET_SET((pthread_mutexattr_setrobust_np( + &mutexattr, PTHREAD_MUTEX_ROBUST_NP)), ret); + } +#endif The other two returns should never return EOWNERDEAD if robust mutexes are not supported: @@ -196,6 +202,12 @@ #endif RET_SET((pthread_mutex_lock(&mutexp->mutex)), ret); +#if defined(EOWNERDEAD) + if (ret == EOWNERDEAD) { + RET_SET((pthread_mutex_consistent_np(&mutexp->mutex)), ret); + ret = 0; + } +#endif if (ret != 0) goto err; @@ -306,6 +318,12 @@ #endif if (F_ISSET(mutexp, DB_MUTEX_SELF_BLOCK)) { RET_SET((pthread_mutex_lock(&mutexp->mutex)), ret); +#if defined(EOWNERDEAD) + if (ret == EOWNERDEAD) { + RET_SET((pthread_mutex_consistent_np(&mutexp->mutex)), ret); + ret = 0; + } +#endif if (ret != 0) goto err; hth 73 de Jeff ______________________________________________________________________ RPM Package Manager http://rpm5.org Developer Communication List rpm-devel@rpm5.org