aboutsummaryrefslogtreecommitdiffstats
path: root/include/pthread.h
Commit message (Collapse)AuthorAgeFilesLines
* Add pthread_getname_np() and pthread_setname_np() aliases forKonstantin Belousov2020-06-101-0/+3
| | | | | | | | | | | | | | | pthread_get_name_np() and pthread_set_name_np(). This re-applies r361770 after compatibility fixes. Reviewed by: antoine, jkim, markj Tested by: antoine (exp-run) Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D25117 Notes: svn path=/head/; revision=362032
* POSIX compliance improvements in the pthread(3) functions.Pedro F. Giffuni2018-08-181-37/+54
| | | | | | | | | | | | | | | | This basically adds makes use of the C99 restrict keyword, and also adds some 'const's to four threading functions: pthread_mutexattr_gettype(), pthread_mutexattr_getprioceiling(), pthread_mutexattr_getprotocol(), and pthread_mutex_getprioceiling. The changes are in accordance to POSIX/SUSv4-2018. Hinted by: DragonFlyBSD Relnotes: yes MFC after: 1 month Differential Revision: D16722 Notes: svn path=/head/; revision=337992
* pthread.h: minor indentation cleanups.Pedro F. Giffuni2018-04-041-29/+17
| | | | | | | | | No functional change. X-MFC with: r331969 Notes: svn path=/head/; revision=332035
* pthread.h: drop nullability attributes.Pedro F. Giffuni2018-04-041-101/+95
| | | | | | | | | | | | | | | These have been found to be practically useless. We were actually following the Android bionic library and had some interest in replicating the same warnings and behaviour but Android has since removed them. We are still keeping some uses of nullability attributes in other headers, somewhat in line with Apple's libc. MFC after: 1 week Hinted by: bionic (git 3f66e74b903905e763e104396aff52a81718cfde) Notes: svn path=/head/; revision=331969
* include: General further adoption of SPDX licensing ID tags.Pedro F. Giffuni2017-11-251-1/+3
| | | | | | | | | | | | | | | Mainly focus on files that use BSD 2-Clause license, however the tool I was using mis-identified many licenses so this was mostly a manual - error prone - task. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. Notes: svn path=/head/; revision=326192
* Small inclusion guard comment fix.Pedro F. Giffuni2017-02-161-1/+1
| | | | Notes: svn path=/head/; revision=313818
* Make use of clang nullability attributes.Pedro F. Giffuni2017-01-281-113/+133
| | | | | | | | | | | | | | | | | | Replace uses of the GCC __nonnull__ attribute with the clang nullability qualifiers. The replacement should be transparent for clang developers as the new qualifiers will produce the same warnings and will be useful for static checkers but will not cause aggressive optimizations. GCC will not produce such warnings and developers will have to use upgraded GCC ports built with the system headers from r312538. Hinted by: Apple's Libc-1158.20.4, Bionic libc MFC after: 11.1 Release Differential Revision: https://reviews.freebsd.org/D9004 Notes: svn path=/head/; revision=312934
* Remove some uses of the GCC __nonnull() attribute.Pedro F. Giffuni2017-01-011-83/+64
| | | | | | | | | | | | | | | While the checks are considered useful, the attribute does dangerous optimizations, removing NULL checks where they can be needed. Remove the uses of this attribute introduced in r281130: the changes were inspired on Google's bionic where this attribute is not used anymore. The __nonnull() attribute will be deprecrated from our headers and replaced with the Clang _Nonnull qualifier in the future. MFC after: 3 days Notes: svn path=/head/; revision=311012
* Add implementation of robust mutexes, hopefully close enough to theKonstantin Belousov2016-05-171-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | intention of the POSIX IEEE Std 1003.1TM-2008/Cor 1-2013. A robust mutex is guaranteed to be cleared by the system upon either thread or process owner termination while the mutex is held. The next mutex locker is then notified about inconsistent mutex state and can execute (or abandon) corrective actions. The patch mostly consists of small changes here and there, adding neccessary checks for the inconsistent and abandoned conditions into existing paths. Additionally, the thread exit handler was extended to iterate over the userspace-maintained list of owned robust mutexes, unlocking and marking as terminated each of them. The list of owned robust mutexes cannot be maintained atomically synchronous with the mutex lock state (it is possible in kernel, but is too expensive). Instead, for the duration of lock or unlock operation, the current mutex is remembered in a special slot that is also checked by the kernel at thread termination. Kernel must be aware about the per-thread location of the heads of robust mutex lists and the current active mutex slot. When a thread touches a robust mutex for the first time, a new umtx op syscall is issued which informs about location of lists heads. The umtx sleep queues for PP and PI mutexes are split between non-robust and robust. Somewhat unrelated changes in the patch: 1. Style. 2. The fix for proper tdfind() call use in umtxq_sleep_pi() for shared pi mutexes. 3. Removal of the userspace struct pthread_mutex m_owner field. 4. The sysctl kern.ipc.umtx_vnode_persistent is added, which controls the lifetime of the shared mutex associated with a vnode' page. Reviewed by: jilles (previous version, supposedly the objection was fixed) Discussed with: brooks, Martin Simmons <martin@lispworks.com> (some aspects) Tested by: pho Sponsored by: The FreeBSD Foundation Notes: svn path=/head/; revision=300043
* Implement process-shared locks support for libthr.so.3, withoutKonstantin Belousov2016-02-281-1/+1
| | | | | | | | | | | | | | | breaking the ABI. Special value is stored in the lock pointer to indicate shared lock, and offline page in the shared memory is allocated to store the actual lock. Reviewed by: vangyzen (previous version) Discussed with: deischen, emaste, jhb, rwatson, Martin Simmons <martin@lispworks.com> Tested by: pho Sponsored by: The FreeBSD Foundation Notes: svn path=/head/; revision=296162
* Make use of gcc attributes in some standard include headers.Pedro F. Giffuni2015-04-061-64/+83
| | | | | | | | | | | | | | | | | | | | | | The `nonnull' attribute specifies that some function parameters should be non-null pointers. This is very useful as it helps the compiler generate warnings on suspicious code and can also enable some small optimizations. Also start using 'alloc_size' attribute in the allocator functions. This is an initial step to better integrate our libc with the compiler: these attributes are fully supported by clang and they are also useful for the static analyzer. Note that due to some bogus internal procedure in the way gcc ports are built they may require updating if they were built before r280801. Relnotes: yes Hinted by: Android's bionic libc Differential Revision: https://reviews.freebsd.org/D2107 Notes: svn path=/head/; revision=281130
* Clean some spaces vs tabs.Pedro F. Giffuni2015-03-291-37/+37
| | | | | | | No, this file doesn't conform with KNF at all. Notes: svn path=/head/; revision=280820
* Temporarily revert 280458.Pedro F. Giffuni2015-03-251-76/+59
| | | | | | | | | | | GCC is still carries an old version of cdefs.h which doesn't accept multiple parameters for the nonnull attribute. Since this issue probably affects many ports in the tree we will revert it for now until gcc gets fixed. Notes: svn path=/head/; revision=280636
* Introduce nonnull attributes in the signal and pthread headers.Pedro F. Giffuni2015-03-241-59/+76
| | | | | | | | | | | | | | | | The `nonnull' attribute specifies that some function parameters should be non-null pointers. This is very useful as it helps the compiler generate warnings on suspicious code and can also enable some small optimizations. In clang this is also useful for the static analyzer. While we could go on defining this all over the tree, it only makes sense to annotate a subset of critical functions. Hinted by: Android's bionic libc Differential Revision: https://reviews.freebsd.org/D2101 Notes: svn path=/head/; revision=280458
* Add lock annotations to the header files of our threading libraries.Ed Schouten2014-09-011-27/+49
| | | | | | | | | | | | | | | | | | This change extends all of the functions present in the <pthread.h> and <threads.h> headers to have lock annotations. This will allow Clang to warn about the following: - Locking a function twice, - Unlocking a function without a mutex being locked, - Forgetting to unlock a mutex before returning, - Destroying or reinitializing a mutex that is currenty locked, - Using an unlocked mutex in combination with a condition variable. Enabling these annotations already allowed me to catch a bug in one of our userspace tools (r270749). Notes: svn path=/head/; revision=270943
* Add a dummy statement to the beginning of the pthread_cleanup_pop() macroTijl Coosemans2013-10-221-0/+1
| | | | | | | | | | | | | to allow a call of the macro to be labelled as in: label: pthread_cleanup_pop(); Reviewed by: imp MFC after: 3 days Notes: svn path=/head/; revision=256925
* Remove leftover for r214093.David Xu2011-01-061-9/+0
| | | | Notes: svn path=/head/; revision=217039
* Add pthread_rwlockattr_setkind_np and pthread_rwlockattr_getkind_np, theDavid Xu2010-10-181-2/+14
| | | | | | | | | | | | functions set or get pthread_rwlock type, current supported types are: PTHREAD_RWLOCK_PREFER_READER_NP, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, PTHREAD_RWLOCK_PREFER_WRITER_NP, default is PTHREAD_RWLOCK_PREFER_WRITER_NONCECURSIVE_NP, this maintains binary compatible with old code. Notes: svn path=/head/; revision=214007
* In current code, statically initialized and destroyed object haveDavid Xu2010-09-281-1/+1
| | | | | | | | | | | same null value, the code can not distinguish between them, to fix the problem, now a destroyed object is assigned to a non-null value, and it will be rejected by some pthread functions. PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP is changed to number 1, so that adaptive mutex can be statically initialized correctly. Notes: svn path=/head/; revision=213241
* Fix the visibility of several prototypes. Also move pthread_kill() andDavid Schultz2009-03-141-2/+4
| | | | | | | | | | | | | pthread_sigmask() to signal.h. In principle, this shouldn't break anything, since they're already in signal.h on other systems, and the FreeBSD manpage says that both pthread.h and signal.h need to be included to get these functions. Add a hack to declare pthread_t in the P1003.1-2008 namespace in signal.h. Notes: svn path=/head/; revision=189828
* Make pthread_cleanup_push() and pthread_cleanup_pop() as a pair of macros,David Xu2008-06-091-2/+21
| | | | | | | | | | use stack space to keep cleanup information, this eliminates overhead of calling malloc() and free() in thread library. Discussed on: thread@ Notes: svn path=/head/; revision=179662
* Add POSIX pthread API pthread_getcpuclockid() to get a thread's cpuDavid Xu2008-03-221-0/+1
| | | | | | | time clock id. Notes: svn path=/head/; revision=177494
* Add a new "non-portable" mutex type, PTHREAD_MUTEX_ADAPTIVE_NP. ThisKris Kennaway2007-10-291-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | is also implemented in glibc and is used by a number of existing applications (mysql, firefox, etc). This mutex type is a default mutex with the additional property that it spins briefly when attempting to acquire a contested lock, doing trylock operations in userland before entering the kernel to block if eventually unsuccessful. The expectation is that applications requesting this mutex type know that the mutex is likely to be only held for very brief periods, so it is faster to spin in userland and probably succeed in acquiring the mutex, than to enter the kernel and sleep, only to be woken up almost immediately. This can help significantly in certain cases when pthread mutexes are heavily contended and held for brief durations (such as mysql). Spin up to 200 times before entering the kernel, which represents only a few us on modern CPUs. No performance degradation was observed with this value and it is sufficient to avoid a large performance drop in mysql performance in the heavily contended pthread mutex case. The libkse implementation is a NOP. Reviewed by: jeff MFC after: 3 days Notes: svn path=/head/; revision=173154
* Add prototype for following functions, plus tab fixes.David Xu2005-10-241-5/+8
| | | | | | | | | | pthread_condattr_getpshared pthread_condattr_setpshared pthread_mutexattr_getpshared pthread_mutexattr_setpshared Notes: svn path=/head/; revision=151617
* Improve POSIX conformance:Stefan Farfeleder2005-09-011-7/+7
| | | | | | | | | | | | | | | - Don't pollute the namespace by including <sys/types.h>, <sys/time.h>, <sys/signal.h> and <limits.h>. Use __MINSIGSTKSZ and __ULONG_MAX from <machine/_limits.h>, __sigset_t from <sys/_sigset.h> instead. - Include <time.h> because POSIX says we have to. PTHREAD_{DESTRUCTOR_ITERATIONS,KEYS_MAX,STACK_MIN,THREADS_MAX} should eventually move to <limits.h> but are left here for now. Discussed on: standards@, threads@ Notes: svn path=/head/; revision=149692
* - Prefix MUTEX_TYPE_MAX with PTHREAD_ to avoid namespace pollution.Stefan Farfeleder2005-08-191-5/+1
| | | | | | | | | - Remove the macros MUTEX_TYPE_FAST and MUTEX_TYPE_COUNTING_FAST. OK'ed by: deischen Notes: svn path=/head/; revision=149298
* Remove parameter names, the identifiers were in the user namespace.Stefan Farfeleder2005-08-191-5/+3
| | | | Notes: svn path=/head/; revision=149273
* According to:Craig Rodrigues2005-05-311-56/+1
| | | | | | | | | | | | | | http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/types.h.html #include <sys/types.h> should include the definitions of pthread types. PR: standards/78907 Reported by: Brooks Davis Approved by: das (mentor) Notes: svn path=/head/; revision=146824
* Increase PTHREAD_STACK_MIN to MINSIGSTKSZ because thread libraries now useDavid Xu2005-04-111-1/+1
| | | | | | | | | makecontext which enforces a minimum stack size to be MINSIGSTKSZ. Bug report: Bill Middleton <flashdict at gmail dot com>, BSD-sharp project. Notes: svn path=/head/; revision=144892
* Add pthread_condattr_getclock, pthread_condattr_setclock.David Xu2005-04-031-0/+4
| | | | Notes: svn path=/head/; revision=144615
* Fix typo, function name pthread_rwlock_timedrwlock should beDavid Xu2005-01-081-1/+1
| | | | | | | pthread_rwlock_timedwrlock. Notes: svn path=/head/; revision=139902
* Add the pthread_atfork() prototype.Daniel Eischen2003-11-041-0/+2
| | | | | | | Reviewed by: davidxu Notes: svn path=/head/; revision=122076
* Add code to support pthread spin lock.David Xu2003-09-091-0/+7
| | | | | | | Reviewed by: deischen Notes: svn path=/head/; revision=119909
* Add small piece of code to support pthread_rwlock_timedrdlock andDavid Xu2003-09-061-0/+4
| | | | | | | pthread_rwlock_timedrwlock. Notes: svn path=/head/; revision=119790
* Add code to support barrier synchronous object and implementDavid Xu2003-09-041-0/+16
| | | | | | | | | pthread_mutex_timedlock(). Reviewed by: deischen Notes: svn path=/head/; revision=119736
* Add stub implementations of pthread_[gs]etconcurrency to libc_r andJohn Polstra2003-04-201-0/+2
| | | | | | | | | | | | libthr. No changes were made to libpthread by request of deischen, who will soon commit a real implementation for that library. PR: standards/50848 Submitted by: Sergey A. Osokin <osa@freebsd.org.ru> MFC after: 1 week Notes: svn path=/head/; revision=113729
* Add pthread_attr_getstack() and pthread_attr_setstack().Alfred Perlstein2003-02-101-0/+4
| | | | | | | Submitted by: Craig Rodrigues <rodrigc@attbi.com> Notes: svn path=/head/; revision=110636
* In the absence of consensus as to implement stubs for these TSH-shadedGarrett Wollman2003-01-231-12/+0
| | | | | | | | | routines, remove their declarations. Even though rwlocks have the same functions, XBDft does not shade those declarations so I am leaving them in. (This is probably a bug in the Standard.) Notes: svn path=/head/; revision=109719
* Breath deep and take __P out of the system include files.Warner Losh2002-03-231-107/+96
| | | | | | | | | # This appears to not break X11, but I'm having problems compiling the # glide part of the server with or without this patch, so I can't tell # for sure. Notes: svn path=/head/; revision=93032
* Implement pthread_attr_[gs]etguardsize(). Non-default-size stacks used toJason Evans2001-07-201-0/+3
| | | | | | | | | | | be malloc()ed, but they are now allocated using mmap(), just as the default-size stacks are. A separate cache of stacks is kept for non-default-size stacks. Collaboration with: deischen Notes: svn path=/head/; revision=80021
* mark pthread_exit() as non-returning.Alfred Perlstein2001-03-041-1/+1
| | | | | | | Requested by: Farooq Mela <fmela0@sm.socccd.cc.ca.us> Notes: svn path=/head/; revision=73548
* Remove prototypes for pthread_attr_[gs]etfloatstate(), which we don'tJason Evans2000-12-281-3/+0
| | | | | | | implement. Notes: svn path=/head/; revision=70442
* Fixed missing consts for function parameters, so that the code matchesBruce Evans2000-05-111-3/+7
| | | | | | | | the man page and POSIX.1. Fixed nearby misformatting. Fixed a missing prototype. Notes: svn path=/head/; revision=60382
* Do not conditionalize function prototype definition for functions weJason Evans2000-02-201-6/+0
| | | | | | | | | | implement. Noticed by: Thimble Smith <tim@mysql.com> Approved by: jkh Notes: svn path=/head/; revision=57350
* Make sched_param parameter a const to comply with POSIX and SUSv2 specs.Daniel Eischen2000-01-101-1/+1
| | | | | | | | | | This doesn't need to be applied to stable, because somehow -stable seems to have gotten it right. Reviewed by: jasone Notes: svn path=/head/; revision=55708
* Fix some minor POSIX/SUSv2 compliance nits.Jason Evans1999-12-181-4/+2
| | | | | | | PR: kern/11982 Notes: svn path=/head/; revision=54757
* Move POSIX feature constants from pthread.h to unistd.h, as required byJason Evans1999-12-161-17/+0
| | | | | | | | | | | | | | | | | 1003.1c-1995. Undefine _POSIX_THREAD_SAFE_FUNCTIONS, since we do not implement all of the necessary interfaces. At least getgrgid_r(), getrnam_r(), getpwuid_r(), getpwnam_r(), getc_unlocked(), getchar_unlocked(), putc_unlocked(), and putchar_unlocked() are missing. Due to a likely typo in 1003.1c-1995, we are not technically allowed to define _POSIX_THREADS without defining _POSIX_THREAD_SAFE_FUNCTIONS, but either way we're non-compliant, so I'm leaving _POSIX_THREADS defined. PR: bin/8281 Notes: svn path=/head/; revision=54699
* add pthread_cancel, obtained from OpenBSD.Alfred Perlstein1999-11-281-7/+14
| | | | | | | | | | | | | | | | | eischen (Daniel Eischen) added wrappers to protect against cancled threads orphaning internal resources. the cancelability code is still a bit fuzzy but works for test programs of my own, OpenBSD's and some examples from ORA's books. add readdir_r to both libc and libc_r add some 'const' attributes to function parameters Reviewed by: eischen, jasone Notes: svn path=/head/; revision=53812
* $Id$ -> $FreeBSD$Peter Wemm1999-08-271-1/+1
| | | | Notes: svn path=/head/; revision=50473
* Cleanups to the pthread header files.Ralf S. Engelschall1999-07-311-22/+22
| | | | | | | | Submitted by: Ralf S. Engelschall <rse@engelschall.com> Reviewed by: John Birrell <jb@cimlogic.com.au> Notes: svn path=/head/; revision=49307