From 571f2090f876fee3eb99fd141d6595e6bc45549c Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 23 Sep 2003 04:41:29 +0000 Subject: Update. 2003-09-22 Philip Blundell * forward.c: Add _pthread_cleanup_push, _pthread_cleanup_pop. * sysdeps/pthread/pthread-functions.h (struct pthread_functions): Likewise. * pthread.c (__pthread_elements): Initialise these new elements. * sysdeps/pthread/bits/libc-lock.h (__libc_cleanup_push): Use __libc_maybe_call. (__libc_cleanup_pop): Likewise. --- linuxthreads/sysdeps/pthread/bits/libc-lock.h | 14 ++++---------- linuxthreads/sysdeps/pthread/pthread-functions.h | 5 +++++ 2 files changed, 9 insertions(+), 10 deletions(-) (limited to 'linuxthreads/sysdeps') diff --git a/linuxthreads/sysdeps/pthread/bits/libc-lock.h b/linuxthreads/sysdeps/pthread/bits/libc-lock.h index c0d0deb..7e22166 100644 --- a/linuxthreads/sysdeps/pthread/bits/libc-lock.h +++ b/linuxthreads/sysdeps/pthread/bits/libc-lock.h @@ -265,18 +265,12 @@ typedef pthread_key_t __libc_key_t; } #define __libc_cleanup_push(fct, arg) \ - { struct _pthread_cleanup_buffer _buffer; \ - int _avail = _pthread_cleanup_push != NULL; \ - if (_avail) { \ - _pthread_cleanup_push (&_buffer, (fct), (arg)); \ - } + { struct _pthread_cleanup_buffer _buffer; \ + __libc_maybe_call (_pthread_cleanup_push, (&_buffer, (fct), (arg)), 0) #define __libc_cleanup_pop(execute) \ - if (_avail) { \ - _pthread_cleanup_pop (&_buffer, execute); \ - } \ - } - + __libc_maybe_call (_pthread_cleanup_pop, (&_buffer, execute), 0); \ + } /* Create thread-specific key. */ #define __libc_key_create(KEY, DESTRUCTOR) \ diff --git a/linuxthreads/sysdeps/pthread/pthread-functions.h b/linuxthreads/sysdeps/pthread/pthread-functions.h index deade5c..43a328a 100644 --- a/linuxthreads/sysdeps/pthread/pthread-functions.h +++ b/linuxthreads/sysdeps/pthread/pthread-functions.h @@ -83,6 +83,11 @@ struct pthread_functions int (*ptr_pthread_raise) (int sig); int (*ptr___pthread_cond_timedwait) (pthread_cond_t *, pthread_mutex_t *, const struct timespec *); + void (*ptr__pthread_cleanup_push) (struct _pthread_cleanup_buffer * buffer, + void (*routine)(void *), void * arg); + + void (*ptr__pthread_cleanup_pop) (struct _pthread_cleanup_buffer * buffer, + int execute); }; /* Variable in libc.so. */ -- cgit v1.1