summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1999-04-28 21:58:40 +0000
committerUlrich Drepper <drepper@redhat.com>1999-04-28 21:58:40 +0000
commit89afc233db58d3de7669332d141113ec2ca4991d (patch)
treebd1459e29124e35f839309ca55727d72d7b2d1e1
parent390500b147a8063ea4be7313ec38cada26f9235a (diff)
downloadglibc-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/ChangeLog4
-rw-r--r--linuxthreads/sysdeps/pthread/bits/libc-lock.h20
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) \