From bf619d82c82052741323aa63c107fbd346c8aaba Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Tue, 29 Mar 2011 12:58:22 -0400 Subject: major improvements to cancellation handling - there is no longer any risk of spoofing cancellation requests, since the cancel flag is set in pthread_cancel rather than in the signal handler. - cancellation signal is no longer unblocked when running the cancellation handlers. instead, pthread_create will cause any new threads created from a cancellation handler to unblock their own cancellation signal. - various tweaks in preparation for POSIX timer support. --- src/internal/libc.h | 1 + src/internal/pthread_impl.h | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'src/internal') diff --git a/src/internal/libc.h b/src/internal/libc.h index bbbb3a4c..c83fcafe 100644 --- a/src/internal/libc.h +++ b/src/internal/libc.h @@ -18,6 +18,7 @@ struct __libc { FILE *ofl_head; int ofl_lock; void (*lockfile)(FILE *); + void (*sigtimer)(); }; diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h index 615b963a..f2d0ae8c 100644 --- a/src/internal/pthread_impl.h +++ b/src/internal/pthread_impl.h @@ -41,10 +41,14 @@ struct pthread { long off; void *pending; } robust_list; + int unblock_cancel; }; struct __timer { - struct sigevent sev; + int timerid; + union sigval val; + void (*notify)(union sigval); + pthread_t thread; }; #define __SU (sizeof(size_t)/sizeof(int)) @@ -73,7 +77,6 @@ struct __timer { #define SIGCANCEL 32 #define SIGSYSCALL 33 -#define SIGTIMER 32 /* ?? */ int __set_thread_area(void *); int __libc_sigaction(int, const struct sigaction *, struct sigaction *); -- cgit v1.2.1