diff options
Diffstat (limited to 'libpthread/linuxthreads.old/join.c')
| -rw-r--r-- | libpthread/linuxthreads.old/join.c | 10 | 
1 files changed, 7 insertions, 3 deletions
| diff --git a/libpthread/linuxthreads.old/join.c b/libpthread/linuxthreads.old/join.c index f249a8114..4bdc77a25 100644 --- a/libpthread/linuxthreads.old/join.c +++ b/libpthread/linuxthreads.old/join.c @@ -37,9 +37,13 @@ void __pthread_do_exit(void *retval, char *currentframe)    struct pthread_request request;    PDEBUG("self=%p, pid=%d\n", self, self->p_pid); -  /* Reset the cancellation flag to avoid looping if the cleanup handlers -     contain cancellation points */ -  THREAD_SETMEM(self, p_canceled, 0); +  /* obey POSIX behavior and prevent cancellation functions from +   * being called more than once. +   * http://sourceware.org/ml/libc-ports/2006-10/msg00043.html +   */ +  THREAD_SETMEM(self, p_cancelstate, PTHREAD_CANCEL_DISABLE); +  THREAD_SETMEM(self, p_canceltype, PTHREAD_CANCEL_DEFERRED); +    /* Call cleanup functions and destroy the thread-specific data */    __pthread_perform_cleanup(currentframe);    __pthread_destroy_specifics(); | 
