diff options
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | linuxthreads/ChangeLog | 7 | ||||
-rw-r--r-- | linuxthreads/manager.c | 8 | ||||
-rw-r--r-- | linuxthreads/pthread.c | 3 | ||||
-rw-r--r-- | sysdeps/generic/dl-tls.c | 8 |
5 files changed, 18 insertions, 10 deletions
@@ -1,5 +1,7 @@ 2002-08-20 Ulrich Drepper <drepper@redhat.com> + * sysdeps/generic/dl-tls.c (allocate_dtv): Optimize a bit. + * elf/Versions [ld] (GLIBC_PRIVATE): Add _dl_get_tls_static_info. * sysdeps/generic/dl-tls.c (_dl_allocate_tls_storage): Move dtv memory allocation to... diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index 5b08d3f17a..6b6195b7d2 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,10 @@ +2002-08-20 Ulrich Drepper <drepper@redhat.com> + + * manager.c (pthread_handle_create): Pass NULL to _dl_allocate_tls. + Pass true to _dl_deallocate_tls. + (pthread_free): Likewise. + * pthread.c (__pthread_initialize_manager): Likewise. + 2002-08-19 Ulrich Drepper <drepper@redhat.com> * sysdeps/i386/useldt.h (DO_SET_THREAD_AREA): Use correct shift when diff --git a/linuxthreads/manager.c b/linuxthreads/manager.c index 655c7d64ab..24be94129b 100644 --- a/linuxthreads/manager.c +++ b/linuxthreads/manager.c @@ -599,7 +599,7 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr, int saved_errno = 0; #ifdef USE_TLS - new_thread = _dl_allocate_tls (); + new_thread = _dl_allocate_tls (NULL); if (new_thread == NULL) return EAGAIN; #else @@ -619,7 +619,7 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr, if (sseg >= PTHREAD_THREADS_MAX) { #ifdef USE_TLS - _dl_deallocate_tls (new_thread); + _dl_deallocate_tls (new_thread, true); #endif return EAGAIN; } @@ -803,7 +803,7 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr, #endif } #ifdef USE_TLS - _dl_deallocate_tls (new_thread); + _dl_deallocate_tls (new_thread, true); #endif __pthread_handles[sseg].h_descr = NULL; __pthread_handles[sseg].h_bottom = NULL; @@ -890,7 +890,7 @@ static void pthread_free(pthread_descr th) munmap(guardaddr, stacksize + guardsize); #ifdef USE_TLS - _dl_deallocate_tls (th); + _dl_deallocate_tls (th, true); #endif } } diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c index c43176c40f..b0ef7fb1be 100644 --- a/linuxthreads/pthread.c +++ b/linuxthreads/pthread.c @@ -623,7 +623,8 @@ int __pthread_initialize_manager(void) #ifdef USE_TLS /* Allocate memory for the thread descriptor and the dtv. */ - __pthread_handles[1].h_descr = manager_thread = tcb = _dl_allocate_tls (); + __pthread_handles[1].h_descr = manager_thread = tcb + = _dl_allocate_tls (NULL); if (tcb == NULL) { free(__pthread_manager_thread_bos); __libc_close(manager_pipe[0]); diff --git a/sysdeps/generic/dl-tls.c b/sysdeps/generic/dl-tls.c index 38f40ac8ae..c969464449 100644 --- a/sysdeps/generic/dl-tls.c +++ b/sysdeps/generic/dl-tls.c @@ -212,11 +212,9 @@ allocate_dtv (void *result) { /* This is the initial length of the dtv. */ dtv[0].counter = dtv_length; - /* Fill in the generation number. */ - dtv[1].counter = GL(dl_tls_generation) = 0; - /* Initialize all of the rest of the dtv with zero to indicate - nothing there. */ - memset (dtv + 2, '\0', dtv_length * sizeof (dtv_t)); + /* Initialize all of the rest of the dtv (including the + generation counter) with zero to indicate nothing there. */ + memset (dtv + 1, '\0', (dtv_length + 1) * sizeof (dtv_t)); /* Add the dtv to the thread data structures. */ INSTALL_DTV (result, dtv); |