RPM Community Forums

Mailing List Message of <rpm-devel>

Re: robust mutexes patch for glibc/kernel w/o robust mutexes

From: Ralf S. Engelschall <rse+rpm-devel@rpm5.org>
Date: Sun 29 Jul 2007 - 16:47:16 CEST
Message-ID: <20070729144716.GA69556@engelschall.com>
On Sun, Jul 29, 2007, Jeff Johnson wrote:

> 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;

Anyway, I suggest to at least use "#if defined(EOWNERDEAD) &&
defined(PTHREAD_MUTEX_ROBUST_NP)" in all 3 cases or we will suffer from
portability issues too easily...

                                       Ralf S. Engelschall
                                       rse@engelschall.com
                                       www.engelschall.com
Received on Sun Jul 29 16:50:17 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.