aboutsummaryrefslogtreecommitdiff
path: root/linuxthreads
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-09-23 04:41:29 +0000
committerUlrich Drepper <drepper@redhat.com>2003-09-23 04:41:29 +0000
commit571f2090f876fee3eb99fd141d6595e6bc45549c (patch)
tree754b93812c920bb3c3a5e62e4c092d80baa74825 /linuxthreads
parent365b16029b0a6645fac11ff61de21ca0d23d223f (diff)
downloadglibc-571f2090f876fee3eb99fd141d6595e6bc45549c.tar
glibc-571f2090f876fee3eb99fd141d6595e6bc45549c.tar.gz
glibc-571f2090f876fee3eb99fd141d6595e6bc45549c.tar.bz2
glibc-571f2090f876fee3eb99fd141d6595e6bc45549c.zip
Update.
2003-09-22 Philip Blundell <philb@gnu.org> * 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.
Diffstat (limited to 'linuxthreads')
-rw-r--r--linuxthreads/ChangeLog10
-rw-r--r--linuxthreads/forward.c4
-rw-r--r--linuxthreads/pthread.c4
-rw-r--r--linuxthreads/sysdeps/pthread/bits/libc-lock.h14
-rw-r--r--linuxthreads/sysdeps/pthread/pthread-functions.h5
5 files changed, 26 insertions, 11 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 62c05e256d..adbb233535 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,13 @@
+2003-09-22 Philip Blundell <philb@gnu.org>
+
+ * 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.
+
2003-09-22 Jakub Jelinek <jakub@redhat.com>
* attr.c: Include stdlib.h.
diff --git a/linuxthreads/forward.c b/linuxthreads/forward.c
index 46cf53893e..b2a36d7d60 100644
--- a/linuxthreads/forward.c
+++ b/linuxthreads/forward.c
@@ -173,3 +173,7 @@ FORWARD (pthread_setcancelstate, (int state, int *oldstate), (state, oldstate),
0)
FORWARD (pthread_setcanceltype, (int type, int *oldtype), (type, oldtype), 0)
+
+FORWARD2 (_pthread_cleanup_push, void, (struct _pthread_cleanup_buffer * buffer, void (*routine)(void *), void * arg), (buffer, routine, arg), return)
+
+FORWARD2 (_pthread_cleanup_pop, void, (struct _pthread_cleanup_buffer * buffer, int execute), (buffer, execute), return)
diff --git a/linuxthreads/pthread.c b/linuxthreads/pthread.c
index a6a2edac81..b3953542e0 100644
--- a/linuxthreads/pthread.c
+++ b/linuxthreads/pthread.c
@@ -279,7 +279,9 @@ struct pthread_functions __pthread_functions =
.ptr_pthread_cleanup_upto = __pthread_cleanup_upto,
.ptr_pthread_sigaction = __pthread_sigaction,
.ptr_pthread_sigwait = __pthread_sigwait,
- .ptr_pthread_raise = __pthread_raise
+ .ptr_pthread_raise = __pthread_raise,
+ .ptr__pthread_cleanup_push = _pthread_cleanup_push,
+ .ptr__pthread_cleanup_pop = _pthread_cleanup_pop
};
#ifdef SHARED
# define ptr_pthread_functions &__pthread_functions
diff --git a/linuxthreads/sysdeps/pthread/bits/libc-lock.h b/linuxthreads/sysdeps/pthread/bits/libc-lock.h
index c0d0debe14..7e22166862 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 deade5c981..43a328ae9c 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. */