diff options
author | Rich Felker <dalias@aerifal.cx> | 2011-08-03 19:57:46 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2011-08-03 19:57:46 -0400 |
commit | 5f37fc132a8f41994f37b6712feb2d4fd34c2be0 (patch) | |
tree | aaaa1a58cb009684d183ee7cb21b805c540f6a3e /src/thread/cancellation.c | |
parent | 56385dd5feb4292183c48f62355e1ce4d796957e (diff) | |
download | musl-5f37fc132a8f41994f37b6712feb2d4fd34c2be0.tar.gz musl-5f37fc132a8f41994f37b6712feb2d4fd34c2be0.tar.bz2 musl-5f37fc132a8f41994f37b6712feb2d4fd34c2be0.tar.xz musl-5f37fc132a8f41994f37b6712feb2d4fd34c2be0.zip |
further debloat cancellation handlers
cleanup push and pop are also no-ops if pthread_exit is not reachable.
this can make a big difference for library code which needs to protect
itself against cancellation, but which is unlikely to actually be used
in programs with threads/cancellation.
Diffstat (limited to 'src/thread/cancellation.c')
-rw-r--r-- | src/thread/cancellation.c | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/src/thread/cancellation.c b/src/thread/cancellation.c index 6dfee539..b02cdfb0 100644 --- a/src/thread/cancellation.c +++ b/src/thread/cancellation.c @@ -1,18 +1,11 @@ #include "pthread_impl.h" -#ifdef __pthread_register_cancel -#undef __pthread_register_cancel -#undef __pthread_unregister_cancel -#undef __pthread_unwind_next -#define __pthread_register_cancel __pthread_register_cancel_3 -#define __pthread_unregister_cancel __pthread_unregister_cancel_3 -#define __pthread_unwind_next __pthread_unwind_next_3 -#endif - static void dummy(struct __ptcb *cb) { } weak_alias(dummy, __pthread_do_unwind); +weak_alias(dummy, __pthread_do_register); +weak_alias(dummy, __pthread_do_unregister); void __pthread_unwind_next(struct __ptcb *cb) { @@ -21,13 +14,10 @@ void __pthread_unwind_next(struct __ptcb *cb) void __pthread_register_cancel(struct __ptcb *cb) { - struct pthread *self = pthread_self(); - cb->__next = self->cancelbuf; - self->cancelbuf = cb; + __pthread_do_register(cb); } void __pthread_unregister_cancel(struct __ptcb *cb) { - struct pthread *self = __pthread_self(); - self->cancelbuf = self->cancelbuf->__next; + __pthread_do_unregister(cb); } |