This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Thu, Aug 08, 2002 at 11:59:52PM +0200, Jakub Jelinek wrote: > Is there any reason why this shouldn't work (ie. does somebody > use __pthread_handles before __pthread_initialize_minimal)? > Testing still in progress. As I wrote in the follow up mails, I've tested this using gdb and it worked just fine, furthermore it makes libpthread at least on IA-32 use one less page (because of the __pthread_handles placement at end of .bss). > The reason for moving __pthread_handles into separate file > is that it can be at the very end of bss, so that unless all 16384 > threads are running the unneeded pages at the end are never touched. > > 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. > * pthread.c (__pthread_initialize_minimal): Initialize > __pthread_handles[0] and __pthread_handles[1]. > * Makefile (libpthread-routines): Add pthandles (must be last). > > --- libc/linuxthreads/sysdeps/unix/sysv/linux/bits/local_lim.h.jj 2002-04-10 00:08:12.000000000 +0200 > +++ libc/linuxthreads/sysdeps/unix/sysv/linux/bits/local_lim.h 2002-08-08 23:08:39.000000000 +0200 > @@ -64,7 +64,7 @@ > /* The number of threads per process. */ > #define _POSIX_THREAD_THREADS_MAX 64 > /* This is the value this implementation supports. */ > -#define PTHREAD_THREADS_MAX 1024 > +#define PTHREAD_THREADS_MAX 16384 > > /* Maximum amount by which a process can descrease its asynchronous I/O > priority level. */ > --- libc/linuxthreads/manager.c.jj 2002-08-04 20:23:21.000000000 +0200 > +++ libc/linuxthreads/manager.c 2002-08-08 23:39:01.000000000 +0200 > @@ -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; > > --- libc/linuxthreads/pthread.c.jj 2002-08-08 10:39:16.000000000 +0200 > +++ libc/linuxthreads/pthread.c 2002-08-08 23:06:51.000000000 +0200 > @@ -417,6 +417,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. */ > @@ -449,6 +454,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 > --- libc/linuxthreads/Makefile.jj 2002-07-23 10:05:33.000000000 +0200 > +++ libc/linuxthreads/Makefile 2002-08-08 23:38:05.000000000 +0200 > @@ -36,7 +36,8 @@ libpthread-routines := attr cancel condv > 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 > --- libc/linuxthreads/pthandles.c.jj 2002-08-09 00:17:21.000000000 +0200 > +++ libc/linuxthreads/pthandles.c 2002-08-08 23:38:51.000000000 +0200 > @@ -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]; > > Jakub Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |