about summary refs log tree commit diff
path: root/include/pthread.h
Commit message (Collapse)AuthorAgeFilesLines
* add new masked cancellation modeRich Felker2015-02-211-0/+1
| | | | | | | | | | | | 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.
* don't shadow functions with macros in C++Bobby Bingham2014-12-091-0/+2
| | | | | | | | | | 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.
* add pthread_setaffinity_np and pthread_getaffinity_np functionsRich Felker2013-08-101-0/+3
|
* provide prototype for pthread_getattr_npRich Felker2013-03-311-0/+4
|
* add stub versions of some missing optional pthread interfacesRich Felker2012-11-171-0/+5
| | | | | | | | | | | | | 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.
* add support for thread scheduling (POSIX TPS option)Rich Felker2012-11-111-0/+4
| | | | | | | | | | 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.
* remove all remaining redundant __restrict/__inline/_Noreturn defsRich Felker2012-09-081-12/+1
|
* further use of _Noreturn, for non-plain-C functionsRich Felker2012-09-061-1/+8
| | | | | | | | | | | | | | | | | | | 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.
* use restrict everywhere it's required by c99 and/or posix 2008Rich Felker2012-09-061-27/+33
| | | | | | | | 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.
* use c++-friendly initializers for pthread initializer definitionsRich Felker2012-02-291-3/+3
| | | | these will also avoid obnoxious warnings with gcc -Wbraces.
* replace bad cancellation cleanup abi with a sane oneRich Felker2012-02-091-16/+9
| | | | | | | | | | | | | | | | | | | | | | 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.
* macro for pthread_equalRich Felker2011-08-141-0/+2
| | | | no sense bloating apps with a function call for an equality comparison...
* use __attribute__((const)) for errno and pthread_self if __GNUC__ is definedRich Felker2011-06-061-0/+3
| | | | | this is not too ugly and should result in significant code size and performance improvements for many programs.
* implement pthread_[sg]etconcurrency.Rich Felker2011-05-301-0/+3
| | | | | | 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. :-)
* fix misspelled PTHREAD_CANCELED constantRich Felker2011-04-011-1/+1
|
* match glibc/lsb cancellation abi on i386Rich Felker2011-03-251-0/+2
| | | | | | | | 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.
* implement robust mutexesRich Felker2011-03-171-0/+1
| | | | | | 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.
* pthread.h needs clockid_tRich Felker2011-03-121-0/+1
| | | | | 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.
* missing const in some pthread_attr_* prototypesRich Felker2011-03-111-8/+8
|
* add prototypes for pthread_condattr_* and pthread_rwlockattr_*Rich Felker2011-03-071-0/+12
|
* add pthread_atfork interfaceRich Felker2011-02-181-0/+2
| | | | | | | | | 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.
* reorganize pthread data structures and move the definitions to alltypes.hRich Felker2011-02-171-45/+12
| | | | | | | | 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.
* add to pthread.h: pthread_mutex_timedlock and sched.h, time.hRich Felker2011-02-161-1/+3
|
* initial check-in, version 0.5.0 v0.5.0Rich Felker2011-02-121-0/+216