| Commit message (Expand) | Author | Age | Files | Lines |
| * | reorder timer initialization so that timer_create does not depend on free•••this allows small programs which only create times, but never delete
them, to use simple_malloc instead of the full malloc.
| Rich Felker | 2011-03-29 | 2 | -9/+17 |
| * | implement POSIX timers•••this implementation is superior to the glibc/nptl implementation, in
that it gives true realtime behavior. there is no risk of timer
expiration events being lost due to failed thread creation or failed
malloc, because the thread is created as time creation time, and
reused until the timer is deleted.
| Rich Felker | 2011-03-29 | 5 | -0/+143 |
| * | 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 |