diff options
Diffstat (limited to 'linuxthreads')
-rw-r--r-- | linuxthreads/ChangeLog | 7 | ||||
-rw-r--r-- | linuxthreads/Examples/ex16.c | 26 | ||||
-rw-r--r-- | linuxthreads/Makefile | 2 | ||||
-rw-r--r-- | linuxthreads/pthread.c | 1 |
4 files changed, 35 insertions, 1 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index a56b99ce85..8936eac03a 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,3 +1,10 @@ +2001-01-13 Jakub Jelinek <jakub@redhat.com> + + * pthread.c (pthread_onexit_process): Clear + __pthread_manager_thread_bos after freeing it. + * Makefile (tests): Add ex16. + * Examples/ex16.c: New file. + 2001-01-11 Jakub Jelinek <jakub@redhat.com> * Makefile (CFLAGS-pthread.c): Pass -DHAVE_Z_NODELETE if ld supports diff --git a/linuxthreads/Examples/ex16.c b/linuxthreads/Examples/ex16.c new file mode 100644 index 0000000000..6509ae4515 --- /dev/null +++ b/linuxthreads/Examples/ex16.c @@ -0,0 +1,26 @@ +/* Tst case by Jakub Jelinek <jakub@redhat.com>. */ +#include <stdlib.h> +#include <unistd.h> +#include <pthread.h> + +static void * +task (void *p) +{ + sleep (30); + return NULL; +} + +int +main (void) +{ + pthread_t t; + int status; + + status = pthread_create (&t, NULL, task, NULL); + if (status) + exit (status); + + status = pthread_detach (t); + pthread_kill_other_threads_np (); + return status; +} diff --git a/linuxthreads/Makefile b/linuxthreads/Makefile index da3c3d22f7..d3364eaf5b 100644 --- a/linuxthreads/Makefile +++ b/linuxthreads/Makefile @@ -46,7 +46,7 @@ include ../Makeconfig librt-tests = ex10 ex11 tests = ex1 ex2 ex3 ex4 ex5 ex6 ex7 ex8 ex9 $(librt-tests) ex12 ex13 joinrace \ - tststack $(tests-nodelete-$(have-z-nodelete)) ecmutex ex14 ex15 + tststack $(tests-nodelete-$(have-z-nodelete)) ecmutex ex14 ex15 ex16 ifeq (yes,$(build-shared)) tests-nodelete-yes = unload diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c index df1d00b05a..b62393fde9 100644 --- a/linuxthreads/pthread.c +++ b/linuxthreads/pthread.c @@ -753,6 +753,7 @@ static void pthread_onexit_process(int retcode, void *arg) { waitpid(__pthread_manager_thread.p_pid, NULL, __WCLONE); free (__pthread_manager_thread_bos); + __pthread_manager_thread_bos = __pthread_manager_thread_tos = NULL; } } } |