mirror of git://sourceware.org/git/glibc.git
Assume LLL_LOCK_INITIALIZER is 0
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/nptl-init.c (__pthread_initialize_minimal_internal): Remove initialization for LLL_LOCK_INITIALIZER different than 0. * 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.
This commit is contained in:
parent
d7e4c642ef
commit
959aff9fa2
10
ChangeLog
10
ChangeLog
|
@ -1,5 +1,15 @@
|
||||||
2019-05-14 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
2019-05-14 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||||
|
|
||||||
|
* nptl/nptl-init.c (__pthread_initialize_minimal_internal): Remove
|
||||||
|
initialization for LLL_LOCK_INITIALIZER different than 0.
|
||||||
|
* 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/lowlevellock.c (__lll_lock_wait, __lll_lock_wait_private):
|
* nptl/lowlevellock.c (__lll_lock_wait, __lll_lock_wait_private):
|
||||||
Optimize futex call and add systemtap probe.
|
Optimize futex call and add systemtap probe.
|
||||||
|
|
||||||
|
|
|
@ -265,8 +265,6 @@ __pthread_initialize_minimal_internal (void)
|
||||||
__pthread_initialize_pids (pd);
|
__pthread_initialize_pids (pd);
|
||||||
THREAD_SETMEM (pd, specific[0], &pd->specific_1stblock[0]);
|
THREAD_SETMEM (pd, specific[0], &pd->specific_1stblock[0]);
|
||||||
THREAD_SETMEM (pd, user_stack, true);
|
THREAD_SETMEM (pd, user_stack, true);
|
||||||
if (LLL_LOCK_INITIALIZER != 0)
|
|
||||||
THREAD_SETMEM (pd, lock, LLL_LOCK_INITIALIZER);
|
|
||||||
|
|
||||||
/* Initialize the robust mutex data. */
|
/* Initialize the robust mutex data. */
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,18 +31,9 @@ __pthread_cond_broadcast_2_0 (pthread_cond_2_0_t *cond)
|
||||||
{
|
{
|
||||||
pthread_cond_t *newcond;
|
pthread_cond_t *newcond;
|
||||||
|
|
||||||
#if LLL_LOCK_INITIALIZER == 0
|
|
||||||
newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
|
newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
|
||||||
if (newcond == NULL)
|
if (newcond == NULL)
|
||||||
return ENOMEM;
|
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))
|
if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL))
|
||||||
/* Somebody else just initialized the condvar. */
|
/* Somebody else just initialized the condvar. */
|
||||||
|
|
|
@ -31,18 +31,9 @@ __pthread_cond_signal_2_0 (pthread_cond_2_0_t *cond)
|
||||||
{
|
{
|
||||||
pthread_cond_t *newcond;
|
pthread_cond_t *newcond;
|
||||||
|
|
||||||
#if LLL_LOCK_INITIALIZER == 0
|
|
||||||
newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
|
newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
|
||||||
if (newcond == NULL)
|
if (newcond == NULL)
|
||||||
return ENOMEM;
|
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))
|
if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL))
|
||||||
/* Somebody else just initialized the condvar. */
|
/* Somebody else just initialized the condvar. */
|
||||||
|
|
|
@ -32,18 +32,9 @@ __pthread_cond_timedwait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex,
|
||||||
{
|
{
|
||||||
pthread_cond_t *newcond;
|
pthread_cond_t *newcond;
|
||||||
|
|
||||||
#if LLL_LOCK_INITIALIZER == 0
|
|
||||||
newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
|
newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
|
||||||
if (newcond == NULL)
|
if (newcond == NULL)
|
||||||
return ENOMEM;
|
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))
|
if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL))
|
||||||
/* Somebody else just initialized the condvar. */
|
/* Somebody else just initialized the condvar. */
|
||||||
|
|
|
@ -31,18 +31,9 @@ __pthread_cond_wait_2_0 (pthread_cond_2_0_t *cond, pthread_mutex_t *mutex)
|
||||||
{
|
{
|
||||||
pthread_cond_t *newcond;
|
pthread_cond_t *newcond;
|
||||||
|
|
||||||
#if LLL_LOCK_INITIALIZER == 0
|
|
||||||
newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
|
newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1);
|
||||||
if (newcond == NULL)
|
if (newcond == NULL)
|
||||||
return ENOMEM;
|
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))
|
if (atomic_compare_and_exchange_bool_acq (&cond->cond, newcond, NULL))
|
||||||
/* Somebody else just initialized the condvar. */
|
/* Somebody else just initialized the condvar. */
|
||||||
|
|
|
@ -71,23 +71,12 @@ typedef pthread_key_t __libc_key_t;
|
||||||
For the C library we take a deeper look at the initializer. For
|
For the C library we take a deeper look at the initializer. For
|
||||||
this implementation all fields are initialized to zero. Therefore
|
this implementation all fields are initialized to zero. Therefore
|
||||||
we don't initialize the variable which allows putting it into the
|
we don't initialize the variable which allows putting it into the
|
||||||
BSS section. (Except on PA-RISC and other odd architectures, where
|
BSS section. */
|
||||||
initialized locks must be set to one due to the lack of normal
|
|
||||||
atomic operations.) */
|
|
||||||
|
|
||||||
|
_Static_assert (LLL_LOCK_INITIALIZER == 0, "LLL_LOCK_INITIALIZER != 0");
|
||||||
#define _LIBC_LOCK_INITIALIZER LLL_LOCK_INITIALIZER
|
#define _LIBC_LOCK_INITIALIZER LLL_LOCK_INITIALIZER
|
||||||
#if IS_IN (libc) || IS_IN (libpthread)
|
#define __libc_lock_define_initialized(CLASS,NAME) \
|
||||||
# if LLL_LOCK_INITIALIZER == 0
|
|
||||||
# define __libc_lock_define_initialized(CLASS,NAME) \
|
|
||||||
CLASS __libc_lock_t 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) \
|
|
||||||
CLASS __libc_lock_t NAME;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define __libc_rwlock_define_initialized(CLASS,NAME) \
|
#define __libc_rwlock_define_initialized(CLASS,NAME) \
|
||||||
CLASS __libc_rwlock_t NAME = PTHREAD_RWLOCK_INITIALIZER;
|
CLASS __libc_rwlock_t NAME = PTHREAD_RWLOCK_INITIALIZER;
|
||||||
|
|
Loading…
Reference in New Issue