This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 3/4] Assume LLL_LOCK_INITIALIZER is 0
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: libc-alpha at sourceware dot org
- Date: Tue, 9 Apr 2019 09:11:39 -0300
- Subject: Re: [PATCH 3/4] Assume LLL_LOCK_INITIALIZER is 0
- References: <20190222192703.18177-1-adhemerval.zanella@linaro.org> <20190222192703.18177-3-adhemerval.zanella@linaro.org>
Ping.
On 22/02/2019 16:27, Adhemerval Zanella wrote:
> Since hppa is not an outlier anymore regarding LLL_LOCK_INITIALIZER value,
> we can now assume it 0 for all architectures.
>
> Checked on a build for all major ABIs.
>
> * nptl/old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0):
> Assume LLL_LOCK_INITIALIZER being 0.
> * nptl/old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise.
> * nptl/old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0):
> Likewise.
> * nptl/old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise.
> * sysdeps/nptl/libc-lockP.h (__libc_lock_define_initialized): Likewise.
> ---
> nptl/old_pthread_cond_broadcast.c | 9 ---------
> nptl/old_pthread_cond_signal.c | 9 ---------
> nptl/old_pthread_cond_timedwait.c | 9 ---------
> nptl/old_pthread_cond_wait.c | 9 ---------
> sysdeps/nptl/libc-lockP.h | 17 +++--------------
> 5 files changed, 3 insertions(+), 50 deletions(-)
>
> diff --git a/nptl/old_pthread_cond_broadcast.c b/nptl/old_pthread_cond_broadcast.c
> index f561eb941f..04f285a1b1 100644
> --- a/nptl/old_pthread_cond_broadcast.c
> +++ b/nptl/old_pthread_cond_broadcast.c
> @@ -31,18 +31,9 @@ __pthread_cond_broadcast_2_0 (pthread_cond_2_0_t *cond)
> {
> pthread_cond_t *newcond;
>
> -#if LLL_LOCK_INITIALIZER == 0
> newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
> if (newcond == NULL)
> return ENOMEM;
> -#else
> - newcond = (pthread_cond_t *) malloc (sizeof (pthread_cond_t));
> - if (newcond == NULL)
> - return ENOMEM;
> -
> - /* Initialize the condvar. */
> - (void) pthread_cond_init (newcond, NULL);
> -#endif
>
> if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL))
> /* Somebody else just initialized the condvar. */
> diff --git a/nptl/old_pthread_cond_signal.c b/nptl/old_pthread_cond_signal.c
> index a167c8addc..9b67cb8a54 100644
> --- a/nptl/old_pthread_cond_signal.c
> +++ b/nptl/old_pthread_cond_signal.c
> @@ -31,18 +31,9 @@ __pthread_cond_signal_2_0 (pthread_cond_2_0_t *cond)
> {
> pthread_cond_t *newcond;
>
> -#if LLL_LOCK_INITIALIZER == 0
> newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
> if (newcond == NULL)
> return ENOMEM;
> -#else
> - newcond = (pthread_cond_t *) malloc (sizeof (pthread_cond_t));
> - if (newcond == NULL)
> - return ENOMEM;
> -
> - /* Initialize the condvar. */
> - (void) pthread_cond_init (newcond, NULL);
> -#endif
>
> if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL))
> /* Somebody else just initialized the condvar. */
> diff --git a/nptl/old_pthread_cond_timedwait.c b/nptl/old_pthread_cond_timedwait.c
> index f920320b13..a1fde85825 100644
> --- a/nptl/old_pthread_cond_timedwait.c
> +++ b/nptl/old_pthread_cond_timedwait.c
> @@ -32,18 +32,9 @@ __pthread_cond_timedwait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex,
> {
> pthread_cond_t *newcond;
>
> -#if LLL_LOCK_INITIALIZER == 0
> newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
> if (newcond == NULL)
> return ENOMEM;
> -#else
> - newcond = (pthread_cond_t *) malloc (sizeof (pthread_cond_t));
> - if (newcond == NULL)
> - return ENOMEM;
> -
> - /* Initialize the condvar. */
> - (void) pthread_cond_init (newcond, NULL);
> -#endif
>
> if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL))
> /* Somebody else just initialized the condvar. */
> diff --git a/nptl/old_pthread_cond_wait.c b/nptl/old_pthread_cond_wait.c
> index 2be41b36d6..bb65340a17 100644
> --- a/nptl/old_pthread_cond_wait.c
> +++ b/nptl/old_pthread_cond_wait.c
> @@ -31,18 +31,9 @@ __pthread_cond_wait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex)
> {
> pthread_cond_t *newcond;
>
> -#if LLL_LOCK_INITIALIZER == 0
> newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
> if (newcond == NULL)
> return ENOMEM;
> -#else
> - newcond = (pthread_cond_t *) malloc (sizeof (pthread_cond_t));
> - if (newcond == NULL)
> - return ENOMEM;
> -
> - /* Initialize the condvar. */
> - (void) pthread_cond_init (newcond, NULL);
> -#endif
>
> if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL))
> /* Somebody else just initialized the condvar. */
> diff --git a/sysdeps/nptl/libc-lockP.h b/sysdeps/nptl/libc-lockP.h
> index fc1bfe57e5..07d583f11a 100644
> --- a/sysdeps/nptl/libc-lockP.h
> +++ b/sysdeps/nptl/libc-lockP.h
> @@ -71,23 +71,12 @@ typedef pthread_key_t __libc_key_t;
> For the C library we take a deeper look at the initializer. For
> this implementation all fields are initialized to zero. Therefore
> we don't initialize the variable which allows putting it into the
> - BSS section. (Except on PA-RISC and other odd architectures, where
> - initialized locks must be set to one due to the lack of normal
> - atomic operations.) */
> + BSS section. */
>
> +_Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
> #define _LIBC_LOCK_INITIALIZER LLL_LOCK_INITIALIZER
> -#if IS_IN (libc) || IS_IN (libpthread)
> -# if LLL_LOCK_INITIALIZER == 0
> -# define __libc_lock_define_initialized(CLASS,NAME) \
> - CLASS __libc_lock_t NAME;
> -# else
> -# define __libc_lock_define_initialized(CLASS,NAME) \
> - CLASS __libc_lock_t NAME = LLL_LOCK_INITIALIZER;
> -# endif
> -#else
> -# define __libc_lock_define_initialized(CLASS,NAME) \
> +#define __libc_lock_define_initialized(CLASS,NAME) \
> CLASS __libc_lock_t NAME;
> -#endif
>
> #define __libc_rwlock_define_initialized(CLASS,NAME) \
> CLASS __libc_rwlock_t NAME = PTHREAD_RWLOCK_INITIALIZER;
>