about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--linuxthreads/ChangeLog10
-rw-r--r--linuxthreads/Makefile3
-rw-r--r--linuxthreads/manager.c19
-rw-r--r--linuxthreads/pthandles.c6
-rw-r--r--linuxthreads/pthread.c13
5 files changed, 31 insertions, 20 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index a1f08ac36d..1114321127 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,13 @@
+2002-08-08  Jakub Jelinek  <jakub@redhat.com>
+
+	* sysdeps/unix/sysv/linux/bits/local_lim.h (PTHREAD_THREADS_MAX):
+	Bump to 16384.
+	* manager.c (__pthread_handles): Remove.
+	* pthandles.c: New file.
+	* pthread.c (__pthread_initialize_minimal): Initialize
+	__pthread_handles[0] and __pthread_handles[1].
+	* Makefile (libpthread-routines): Add pthandles (must be last).
+
 2002-08-26 Brian Youmans <3diff@gnu.org>
 
 	* Examples/ex10.c: Corrected version number in Lesser GPL copying
diff --git a/linuxthreads/Makefile b/linuxthreads/Makefile
index 9c5cd8f1bf..ba4327921a 100644
--- a/linuxthreads/Makefile
+++ b/linuxthreads/Makefile
@@ -36,7 +36,8 @@ libpthread-routines := attr cancel condvar join manager mutex ptfork \
 		       ptlongjmp pthread signals specific errno lockfile \
 		       semaphore spinlock wrapsyscall rwlock pt-machine \
 		       oldsemaphore events getcpuclockid pspinlock barrier \
-		       ptclock_gettime ptclock_settime sighandler
+		       ptclock_gettime ptclock_settime sighandler \
+		       pthandles
 
 nodelete-yes = -Wl,--enable-new-dtags,-z,nodelete
 initfirst-yes = -Wl,--enable-new-dtags,-z,initfirst
diff --git a/linuxthreads/manager.c b/linuxthreads/manager.c
index 24be94129b..08bf467815 100644
--- a/linuxthreads/manager.c
+++ b/linuxthreads/manager.c
@@ -36,25 +36,6 @@
 #include "restart.h"
 #include "semaphore.h"
 
-/* Array of active threads. Entry 0 is reserved for the initial thread. */
-struct pthread_handle_struct __pthread_handles[PTHREAD_THREADS_MAX]
-#ifdef USE_TLS
-# if __LT_SPINLOCK_INIT != 0
-= {
-  { __LOCK_INITIALIZER, NULL, 0},
-  { __LOCK_INITIALIZER, NULL, 0},
-  /* All NULLs */
-}
-# endif
-#else
-= {
-  { __LOCK_INITIALIZER, &__pthread_initial_thread, 0},
-  { __LOCK_INITIALIZER, &__pthread_manager_thread, 0},
-  /* All NULLs */
-}
-#endif
-;
-
 /* For debugging purposes put the maximum number of threads in a variable.  */
 const int __linuxthreads_pthread_threads_max = PTHREAD_THREADS_MAX;
 
diff --git a/linuxthreads/pthandles.c b/linuxthreads/pthandles.c
new file mode 100644
index 0000000000..4d2ac1940d
--- /dev/null
+++ b/linuxthreads/pthandles.c
@@ -0,0 +1,6 @@
+#include <ldsodefs.h>
+#include "pthread.h"
+#include "internals.h"
+
+/* Array of active threads. Entry 0 is reserved for the initial thread. */
+struct pthread_handle_struct __pthread_handles[PTHREAD_THREADS_MAX];
diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c
index 1848bfb31d..ae40254982 100644
--- a/linuxthreads/pthread.c
+++ b/linuxthreads/pthread.c
@@ -420,6 +420,11 @@ __pthread_initialize_minimal(void)
 #ifdef USE_TLS
   pthread_descr self;
 
+  /* First of all init __pthread_handles[0] and [1] if needed.  */
+# if __LT_SPINLOCK_INIT != 0
+  __pthread_handles[0].h_lock = __LOCK_INITIALIZER;
+  __pthread_handles[1].h_lock = __LOCK_INITIALIZER;
+# endif
 # ifndef SHARED
   /* Unlike in the dynamically linked case the dynamic linker has not
      taken care of initializing the TLS data structures.  */
@@ -451,6 +456,14 @@ __pthread_initialize_minimal(void)
   /* And fill in the pointer the the thread __pthread_handles array.  */
   __pthread_handles[0].h_descr = self;
 #else
+  /* First of all init __pthread_handles[0] and [1].  */
+# if __LT_SPINLOCK_INIT != 0
+  __pthread_handles[0].h_lock = __LOCK_INITIALIZER;
+  __pthread_handles[1].h_lock = __LOCK_INITIALIZER;
+# endif
+  __pthread_handles[0].h_descr = &__pthread_initial_thread;
+  __pthread_handles[1].h_descr = &__pthread_manager_thread;
+
   /* If we have special thread_self processing, initialize that for the
      main thread now.  */
 # ifdef INIT_THREAD_SELF