aboutsummaryrefslogtreecommitdiff
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