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

Reply via email to