diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-03-20 07:07:18 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-03-20 07:07:18 +0000 |
commit | a6a478e9f927835469cd1b770f395df640966c49 (patch) | |
tree | 1d5c8a1733a4709eccfa952e0785691a6f59c433 /linuxthreads/pthread.c | |
parent | 41a173e1e3a19957dfbed6375e84b8a3363035a7 (diff) | |
download | glibc-a6a478e9f927835469cd1b770f395df640966c49.zip glibc-a6a478e9f927835469cd1b770f395df640966c49.tar.gz glibc-a6a478e9f927835469cd1b770f395df640966c49.tar.bz2 |
Update.
* include/stdlib.h: Add prototype for __cxa_atexit.
Diffstat (limited to 'linuxthreads/pthread.c')
-rw-r--r-- | linuxthreads/pthread.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c index 5884b9b..57bc15e 100644 --- a/linuxthreads/pthread.c +++ b/linuxthreads/pthread.c @@ -308,6 +308,8 @@ __libc_allocate_rtsig (int high) static void pthread_initialize(void) __attribute__((constructor)); +extern void *__dso_handle __attribute__ ((weak)); + static void pthread_initialize(void) { struct sigaction sa; @@ -387,7 +389,13 @@ static void pthread_initialize(void) /* Register an exit function to kill all other threads. */ /* Do it early so that user-registered atexit functions are called before pthread_exit_process. */ - __on_exit(pthread_exit_process, NULL); + if (__dso_handle) + /* The cast is a bit unclean. The function expects two arguments but + we can only pass one. Fortunately this is not a problem since the + second argument of `pthread_exit_process' is simply ignored. */ + __cxa_atexit((void (*) (void *)) pthread_exit_process, NULL, __dso_handle); + else + on_exit (pthread_exit_process, NULL); } void __pthread_initialize(void) |