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.
diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h
index 615b963..f2d0ae8 100644
--- a/src/internal/pthread_impl.h
+++ b/src/internal/pthread_impl.h
@@ -41,10 +41,14 @@
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 @@
#define SIGCANCEL 32
#define SIGSYSCALL 33
-#define SIGTIMER 32 /* ?? */
int __set_thread_area(void *);
int __libc_sigaction(int, const struct sigaction *, struct sigaction *);