diff options
Diffstat (limited to 'libpthread/linuxthreads.old/join.c')
-rw-r--r-- | libpthread/linuxthreads.old/join.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/libpthread/linuxthreads.old/join.c b/libpthread/linuxthreads.old/join.c index 6a8a9d982..f249a8114 100644 --- a/libpthread/linuxthreads.old/join.c +++ b/libpthread/linuxthreads.old/join.c @@ -27,6 +27,11 @@ void pthread_exit(void * retval) { + __pthread_do_exit (retval, CURRENT_STACK_FRAME); +} + +void __pthread_do_exit(void *retval, char *currentframe) +{ pthread_descr self = thread_self(); pthread_descr joining; struct pthread_request request; @@ -36,7 +41,7 @@ void pthread_exit(void * retval) contain cancellation points */ THREAD_SETMEM(self, p_canceled, 0); /* Call cleanup functions and destroy the thread-specific data */ - __pthread_perform_cleanup(); + __pthread_perform_cleanup(currentframe); __pthread_destroy_specifics(); /* Store return value */ __pthread_lock(THREAD_GETMEM(self, p_lock), self); @@ -150,7 +155,7 @@ int pthread_join(pthread_t thread_id, void ** thread_return) if (already_canceled) { __pthread_set_own_extricate_if(self, 0); - pthread_exit(PTHREAD_CANCELED); + __pthread_do_exit(PTHREAD_CANCELED, CURRENT_STACK_FRAME); } PDEBUG("before suspend\n"); @@ -163,7 +168,7 @@ int pthread_join(pthread_t thread_id, void ** thread_return) if (THREAD_GETMEM(self, p_woken_by_cancel) && THREAD_GETMEM(self, p_cancelstate) == PTHREAD_CANCEL_ENABLE) { THREAD_SETMEM(self, p_woken_by_cancel, 0); - pthread_exit(PTHREAD_CANCELED); + __pthread_do_exit(PTHREAD_CANCELED, CURRENT_STACK_FRAME); } __pthread_lock(&handle->h_lock, self); } |