This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 3/4] Assume LLL_LOCK_INITIALIZER is 0


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]