#
31fb174d |
|
07-Nov-2016 |
Rich Felker <dalias@aerifal.cx> |
add limited pthread_setattr_default_np API to set stack size defaults based on patch by Timo Teräs: While generally this is a bad API, it is the only existing API to affect c++ (std::thread) and c11 (thrd_create) thread stack size. This patch allows applications only to increate stack and guard page sizes.
|
#
8fb28b0b |
|
16-Sep-2016 |
Felix Janda <felix.janda@posteo.de> |
add pthread_setname_np the thread name is displayed by gdb's "info threads".
|
#
3d981461 |
|
07-May-2016 |
Bobby Bingham <koorogi@koorogi.info> |
pthread: implement try/timed join variants
|
#
a603a75a |
|
16-Sep-2015 |
Rich Felker <dalias@aerifal.cx> |
remove attribute((const)) from pthread_self and errno location decls this attribute was applied to pthread_self and the functions providing the locations for errno and h_errno as an optimization; however, it is subtly incorrect. as specified, it means the return value will always be the same, which is not true; it varies per-thread. this attribute also implies that the function does not depend on any state, and that calls to it can safely be reordered across any other code. however such reordering is unsafe for these functions: they break when reordered before initialization of the thread pointer. such breakage was actually observed when compiled by libfirm/cparser. to some extent the reordering problem could be solved with strong compiler barriers between the stages of early startup code, but the specified meaning of of attribute((const)) is sufficiently strong that a compiler would theoretically be justified inserting gratuitous calls to attribute((const)) const functions at random locations (e.g. to save the value in static storage for later use). this reverts commit cbf35978a9870fb1f5c73a852c986d4fcca6c2d4.
|
#
102f6a01 |
|
21-Feb-2015 |
Rich Felker <dalias@aerifal.cx> |
add new masked cancellation mode this is a new extension which is presently intended only for experimental and internal libc use. interface and behavior details may change subject to feedback and experience from using it internally. the basic concept for the new PTHREAD_CANCEL_MASKED state is that the first cancellation point to observe the cancellation request fails with an errno value of ECANCELED rather than acting on cancellation, allowing the caller to process the status and choose whether/how to act upon it.
|
#
f164875a |
|
08-Dec-2014 |
Bobby Bingham <koorogi@koorogi.info> |
don't shadow functions with macros in C++ C++ programmers typically expect something like "::function(x,y)" to work and may be surprised to find that "(::function)(x,y)" is actually required due to the headers declaring a macro version of some standard functions. We already omit function-like macros for C++ in most cases where there is a real function available. This commit extends this to the remaining function-like macros which have a real function version.
|
#
7406fdf5 |
|
10-Aug-2013 |
Rich Felker <dalias@aerifal.cx> |
add pthread_setaffinity_np and pthread_getaffinity_np functions
|
#
0b2764d0 |
|
31-Mar-2013 |
Rich Felker <dalias@aerifal.cx> |
provide prototype for pthread_getattr_np
|
#
5c6443ac |
|
17-Nov-2012 |
Rich Felker <dalias@aerifal.cx> |
add stub versions of some missing optional pthread interfaces priority inheritance is not yet supported, and priority protection probably will not be supported ever unless there's serious demand for it (it's a fairly heavy-weight feature). per-thread cpu clocks would be nice to have, but to my knowledge linux is still not capable of supporting them. glibc fakes them by using the _process_ cpu-time clock and subtracting the thread creation time, which gives seriously incorrect semantics (worse than not supporting the feature at all), so until there's a way to do it right, it will remain as a stub that always fails.
|
#
1e21e78b |
|
11-Nov-2012 |
Rich Felker <dalias@aerifal.cx> |
add support for thread scheduling (POSIX TPS option) linux's sched_* syscalls actually implement the TPS (thread scheduling) functionality, not the PS (process scheduling) functionality which the sched_* functions are supposed to have. omitting support for the PS option (and having the sched_* interfaces fail with ENOSYS rather than omitting them, since some broken software assumes they exist) seems to be the only conforming way to do this on linux.
|
#
455f9685 |
|
08-Sep-2012 |
Rich Felker <dalias@aerifal.cx> |
remove all remaining redundant __restrict/__inline/_Noreturn defs
|
#
0c05bd3a |
|
06-Sep-2012 |
Rich Felker <dalias@aerifal.cx> |
further use of _Noreturn, for non-plain-C functions note that POSIX does not specify these functions as _Noreturn, because POSIX is aligned with C99, not the new C11 standard. when POSIX is eventually updated to C11, it will almost surely give these functions the _Noreturn attribute. for now, the actual _Noreturn keyword is not used anyway when compiling with a c99 compiler, which is what POSIX requires; the GCC __attribute__ is used instead if it's available, however. in a few places, I've added infinite for loops at the end of _Noreturn functions to silence compiler warnings. presumably __buildin_unreachable could achieve the same thing, but it would only work on newer GCCs and would not be portable. the loops should have near-zero code size cost anyway. like the previous _Noreturn commit, this one is based on patches contributed by philomath.
|
#
400c5e5c |
|
06-Sep-2012 |
Rich Felker <dalias@aerifal.cx> |
use restrict everywhere it's required by c99 and/or posix 2008 to deal with the fact that the public headers may be used with pre-c99 compilers, __restrict is used in place of restrict, and defined appropriately for any supported compiler. we also avoid the form [restrict] since older versions of gcc rejected it due to a bug in the original c99 standard, and instead use the form *restrict.
|
#
d3675194 |
|
29-Feb-2012 |
Rich Felker <dalias@aerifal.cx> |
use c++-friendly initializers for pthread initializer definitions these will also avoid obnoxious warnings with gcc -Wbraces.
|
#
afc35d5e |
|
09-Feb-2012 |
Rich Felker <dalias@aerifal.cx> |
replace bad cancellation cleanup abi with a sane one the old abi was intended to duplicate glibc's abi at the expense of being ugly and slow, but it turns out glib was not even using that abi except on non-gcc-compatible compilers (which it doesn't even support) and was instead using an exceptions-in-c/unwind-based approach whose abi we could not duplicate anyway without nasty dwarf2/unwind integration. the new abi is copied from a very old glibc abi, which seems to still be supported/present in current glibc. it avoids all unwinding, whether by sjlj or exceptions, and merely maintains a linked list of cleanup functions to be called from the context of pthread_exit. i've made some care to ensure that longjmp out of a cleanup function should work, even though it is not required to. this change breaks abi compatibility with programs which were using pthread cancellation, which is unfortunate, but that's why i'm making the change now rather than later. considering that most pthread features have not been usable until recently anyway, i don't see it as a major issue at this point.
|
#
9205e486 |
|
14-Aug-2011 |
Rich Felker <dalias@aerifal.cx> |
macro for pthread_equal no sense bloating apps with a function call for an equality comparison...
|
#
cbf35978 |
|
06-Jun-2011 |
Rich Felker <dalias@aerifal.cx> |
use __attribute__((const)) for errno and pthread_self if __GNUC__ is defined this is not too ugly and should result in significant code size and performance improvements for many programs.
|
#
ddd87b2f |
|
30-May-2011 |
Rich Felker <dalias@aerifal.cx> |
implement pthread_[sg]etconcurrency. there is a resource limit of 0 bits to store the concurrency level requested. thus any positive level exceeds a resource limit, resulting in EAGAIN. :-)
|
#
3df3d4f5 |
|
01-Apr-2011 |
Rich Felker <dalias@aerifal.cx> |
fix misspelled PTHREAD_CANCELED constant
|
#
ea343364 |
|
25-Mar-2011 |
Rich Felker <dalias@aerifal.cx> |
match glibc/lsb cancellation abi on i386 glibc made the ridiculous choice to use pass-by-register calling convention for these functions, which is impossible to duplicate directly on non-gcc compilers. instead, we use ugly asm to wrap and convert the calling convention. presumably this works with every compiler anyone could potentially want to use.
|
#
047e434e |
|
17-Mar-2011 |
Rich Felker <dalias@aerifal.cx> |
implement robust mutexes some of this code should be cleaned up, e.g. using macros for some of the bit flags, masks, etc. nonetheless, the code is believed to be working and correct at this point.
|
#
d8d19f4d |
|
12-Mar-2011 |
Rich Felker <dalias@aerifal.cx> |
pthread.h needs clockid_t actually it gets this from time.h if _POSIX_C_SOURCE or any other feature test macros are defined, but it breaks if they're not.
|
#
f1821fce |
|
11-Mar-2011 |
Rich Felker <dalias@aerifal.cx> |
missing const in some pthread_attr_* prototypes
|
#
7d57e05f |
|
07-Mar-2011 |
Rich Felker <dalias@aerifal.cx> |
add prototypes for pthread_condattr_* and pthread_rwlockattr_*
|
#
e9417fff |
|
18-Feb-2011 |
Rich Felker <dalias@aerifal.cx> |
add pthread_atfork interface note that this presently does not handle consistency of the libc's own global state during forking. as per POSIX 2008, if the parent process was threaded, the child process may only call async-signal-safe functions until one of the exec-family functions is called, so the current behavior is believed to be conformant even if non-ideal. it may be improved at some later time.
|
#
e8827563 |
|
17-Feb-2011 |
Rich Felker <dalias@aerifal.cx> |
reorganize pthread data structures and move the definitions to alltypes.h this allows sys/types.h to provide the pthread types, as required by POSIX. this design also facilitates forcing ABI-compatible sizes in the arch-specific alltypes.h, while eliminating the need for developers changing the internals of the pthread types to poke around with arch-specific headers they may not be able to test.
|
#
56b784d6 |
|
16-Feb-2011 |
Rich Felker <dalias@aerifal.cx> |
add to pthread.h: pthread_mutex_timedlock and sched.h, time.h
|
#
0b44a031 |
|
11-Feb-2011 |
Rich Felker <dalias@aerifal.cx> |
initial check-in, version 0.5.0
|