diff options
author | Ulrich Drepper <drepper@redhat.com> | 1999-04-28 21:58:40 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1999-04-28 21:58:40 +0000 |
commit | 89afc233db58d3de7669332d141113ec2ca4991d (patch) | |
tree | bd1459e29124e35f839309ca55727d72d7b2d1e1 | |
parent | 390500b147a8063ea4be7313ec38cada26f9235a (diff) | |
download | glibc-89afc233db58d3de7669332d141113ec2ca4991d.tar.gz |
Update.
* sysdeps/pthread/bits/libc-lock.h (__libc_lock_define_initialized):
Don't use initializer since it is all zeroes.
(__libc_once_define): Likewise.
-rw-r--r-- | linuxthreads/ChangeLog | 4 | ||||
-rw-r--r-- | linuxthreads/sysdeps/pthread/bits/libc-lock.h | 20 |
2 files changed, 20 insertions, 4 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index b058c7f95c..a33730213b 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -3,6 +3,10 @@ * manager.c (pthread_allocate_stack): Optimize initialization of new thread descriptor. + * sysdeps/pthread/bits/libc-lock.h (__libc_lock_define_initialized): + Don't use initializer since it is all zeroes. + (__libc_once_define): Likewise. + 1999-04-16 Andreas Jaeger <aj@arthur.rhein-neckar.de> * sysdeps/arm/Implies: Removed since cmpxchg/no-cmpxchg diff --git a/linuxthreads/sysdeps/pthread/bits/libc-lock.h b/linuxthreads/sysdeps/pthread/bits/libc-lock.h index 593117073c..a14cea1aa7 100644 --- a/linuxthreads/sysdeps/pthread/bits/libc-lock.h +++ b/linuxthreads/sysdeps/pthread/bits/libc-lock.h @@ -1,5 +1,5 @@ /* libc-internal interface for mutex locks. LinuxThreads version. - Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -42,9 +42,14 @@ typedef pthread_key_t __libc_key_t; #define __libc_lock_define(CLASS,NAME) \ CLASS __libc_lock_t NAME; -/* Define an initialized lock variable NAME with storage class CLASS. */ +/* Define an initialized lock variable NAME with storage class CLASS. + + 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. */ #define __libc_lock_define_initialized(CLASS,NAME) \ - CLASS __libc_lock_t NAME = PTHREAD_MUTEX_INITIALIZER; + CLASS __libc_lock_t NAME; /* Define an initialized recursive lock variable NAME with storage class CLASS. */ @@ -101,8 +106,15 @@ typedef pthread_key_t __libc_key_t; /* Define once control variable. */ -#define __libc_once_define(CLASS, NAME) \ +#if PTHREAD_ONCE_INIT == 0 +/* Special case for static variables where we can avoid the initialization + if it is zero. */ +# define __libc_once_define(CLASS, NAME) \ + CLASS pthread_once_t NAME +#else +# define __libc_once_define(CLASS, NAME) \ CLASS pthread_once_t NAME = PTHREAD_ONCE_INIT +#endif /* Call handler iff the first call. */ #define __libc_once(ONCE_CONTROL, INIT_FUNCTION) \ |