| Commit message (Expand) | Author | Age | Files | Lines |
| * | overhaul cancellation to fix resource leaks and dangerous behavior with signals•••this commit addresses two issues:
1. a race condition, whereby a cancellation request occurring after a
syscall returned from kernelspace but before the subsequent
CANCELPT_END would cause cancellable resource-allocating syscalls
(like open) to leak resources.
2. signal handlers invoked while the thread was blocked at a
cancellation point behaved as if asynchronous cancellation mode wer in
effect, resulting in potentially dangerous state corruption if a
cancellation request occurs.
the glibc/nptl implementation of threads shares both of these issues.
with this commit, both are fixed. however, cancellation points
encountered in a signal handler will not be acted upon if the signal
was received while the thread was already at a cancellation point.
they will of course be acted upon after the signal handler returns, so
in real-world usage where signal handlers quickly return, it should
not be a problem. it's possible to solve this problem too by having
sigaction() wrap all signal handlers with a function that uses a
pthread_cleanup handler to catch cancellation, patch up the saved
context, and return into the cancellable function that will catch and
act upon the cancellation. however that would be a lot of complexity
for minimal if any benefit...
| Rich Felker | 2011-03-24 | 1 | -0/+1 |
| * | global cleanup to use the new syscall interface | Rich Felker | 2011-03-20 | 6 | -11/+6 |
| * | if returning errno value directly from a syscall, we need to negate it. | Rich Felker | 2011-03-19 | 1 | -1/+1 |
| * | syscall overhaul part two - unify public and internal syscall interface•••with this patch, the syscallN() functions are no longer needed; a
variadic syscall() macro allows syscalls with anywhere from 0 to 6
arguments to be made with a single macro name. also, manually casting
each non-integer argument with (long) is no longer necessary; the
casts are hidden in the macros.
some source files which depended on being able to define the old macro
SYSCALL_RETURNS_ERRNO have been modified to directly use __syscall()
instead of syscall(). references to SYSCALL_SIGSET_SIZE and SYSCALL_LL
have also been changed.
x86_64 has not been tested, and may need a follow-up commit to fix any
minor bugs/oversights.
| Rich Felker | 2011-03-19 | 3 | -6/+3 |
| * | misplaced & in times() made it fail to work, and clobber the stack | Rich Felker | 2011-03-12 | 1 | -1/+1 |
| * | more cancellation points: tcdrain, clock_nanosleep | Rich Felker | 2011-03-10 | 1 | -1/+6 |
| * | fix errno behavior in clock_* functions•••these functions are specified inconsistent in whether they're
specified to return an error value, or return -1 and set errno.
hopefully now they all match what POSIX requires.
| Rich Felker | 2011-03-10 | 3 | -3/+0 |
| * | implement the remaining clock_* interfaces | Rich Felker | 2011-02-19 | 5 | -0/+36 |
| * | initial check-in, version 0.5.0 | Rich Felker | 2011-02-12 | 25 | -0/+874 |