summaryrefslogtreecommitdiff
path: root/sysdeps/generic
AgeCommit message (Collapse)Author
2018-03-19Move bits/barrier-attr.h to bits/types/struct___pthread_barrierattr.hSamuel Thibault
* sysdeps/pthread/bits/barrier-attr.h: Move file to... * sysdeps/pthread/bits/types/struct___pthread_barrierattr.h: ... here. * Makefile (headers): Update accordingly. * sysdeps/generic/pthread.h: Likewise. * sysdeps/pthread/bits/pthreadtypes.h: Likewise.
2018-03-19Move bits/mutex.h to bits/types/struct___pthread_mutex.hSamuel Thibault
* sysdeps/mach/hurd/bits/mutex.h: Move file to... * sysdeps/mach/hurd/bits/types/struct___pthread_mutex.h: ... here. * sysdeps/pthread/bits/mutex.h: Move file to... * sysdeps/pthread/bits/types/struct___pthread_mutex.h: ... here. * Makefile (headers): Update accordingly. * sysdeps/generic/pthread.h: Likewise. * sysdeps/pthread/bits/pthreadtypes.h: Likewise.
2018-03-19Move bits/spin-lock.h to bits/types/__pthread_spinlock_t.hSamuel Thibault
* sysdeps/mach/bits/spin-lock.h: Move file to... * sysdeps/mach/bits/types/__pthread_spinlock_t.h: ... here. * Makefile (headers): Move bits/spin-lock.h to bits/types/__pthread_spinlock_t.h. * pthread/pt-spin-inlines.c: Update accordingly. * sysdeps/generic/pthread.h: Likewise. * sysdeps/mach/bits/spin-lock-inline.h: Likewise. * sysdeps/pthread/bits/barrier.h: Likewise. * sysdeps/pthread/bits/condition.h: Likewise. * sysdeps/pthread/bits/mutex.h: Likewise. * sysdeps/pthread/bits/once.h: Likewise. * sysdeps/pthread/bits/pthreadtypes.h: Likewise. * sysdeps/pthread/bits/rwlock.h: Likewise. * sysdeps/pthread/bits/semaphore.h: Likewise.
2018-03-19Avoid installing private pthread.hSamuel Thibault
It was actually by mistake that sysdeps/pthread/pthread.h was getting installed and that we'd have an include/pthread/pthread.h. Let's simplify this. * sysdeps/pthread/pthread.h: Move file content to... * ./sysdeps/pthread/pthreadP.h: ... here. * sysdeps/generic/pthread/pthread.h: Move file to... * sysdeps/generic/pthread.h: ... here. * Makefile (headers): Remove pthread/pthread.h. * Makeconfig (includes): Remove -I$(..)htl/include. * pthread/cthreads-compat.c: Include <pthreadP.h> instead of <pthread.h>
2018-03-19Move pthread/pthreadtypes.h to bits/pthreadtypes.hSamuel Thibault
* Makefile (headers): Remove pthread/pthreadtypes.h. * sysdeps/generic/pthread/pthread.h: Include <bits/pthreadtypes.h> instead of <pthread/pthreadtypes.h>. * sysdeps/generic/timer_routines.h: Likewise. * sysdeps/pthread/pthread/pthreadtypes.h: Move file content to... * sysdeps/pthread/bits/pthreadtypes.h: ... this file. Do not include <pthread/pthreadtypes.h>
2018-03-19Remove bits/memory.hSamuel Thibault
* sysdeps/generic/pt-once.c: Include <atomic.h> instead of <bits/memory.h> (__pthread_once): Use atomic_full_barrier instead of __memory_barrier. * sysdeps/i386/bits/memory.h: Remove file.
2018-03-18Use sched_param for nowSamuel Thibault
This exposes more structure names than desired, but we can see how to fix that another way later. * sysdeps/pthread/bits/thread-attr.h (__need_schedparam): Do not define macro. (struct __pthread_attr): Make __schedparam field struct sched_param instead of struct __sched_param. * sysdeps/generic/pt-attr.c (__pthread_default_attr): Use sched_priority instead of __sched_priority. * sysdeps/generic/pt-getschedparam.c (__pthread_getschedparam): Likewise. * sysdeps/generic/timer_routines.h (thread_attr_compare): Likewise.
2018-03-03Fix copyright years and addressesAmos Jeffries
* sysdeps/mach/hurd/bits/mutex.h: reformat copyright blurb intro to match other files * replace Free Software Foundation address using gnu.org URL from upstream glibc copyright blurbs. * apply upstream glibc scripts/update-copyrights * update copyright date syntax per upstream glibc request
2018-02-18Add thread_attr_compare helper functionSamuel Thibault
* sysdeps/generic/timer_routines.h: New file.
2018-01-27Add missing prototypesSamuel Thibault
* sysdeps/generic/pthread/pthread.h (pthread_mutexattr_getrobust, pthread_mutexattr_getrobust_np, pthread_mutexattr_setrobust, pthread_mutexattr_setrobust_np, pthread_rwlockattr_getkind_np, pthread_rwlockattr_setkind_np): Add prototypes.
2018-01-25Fix spurious whitespacesSamuel Thibault
2018-01-06Move headers to sysdeps so the normal sysdeps mechanism worksSamuel Thibault
to cope with the removal of add-ons mechanism. * include/pthread/pthread.h: rename to sysdeps/generic/pthread/pthread.h * include/pthread/pthreadtypes.h: rename to sysdeps/generic/pthread/pthreadtypes.h * pthreadP.h: rename to sysdeps/pthread/pthreadP.h
2018-01-06Move key management to sysdeps/genericSamuel Thibault
Now that it does not use libihash any more, it is not hurd-dependent any more. * sysdeps/hurd/pt-destroy-specific.c: Move to sysdeps/generic/pt-destroy-specific.c * sysdeps/hurd/pt-key-create.c: Move to sysdeps/generic/pt-key-create.c. * sysdeps/hurd/pt-key-delete.c: Move to sysdeps/generic/pt-key-delete.c. * sysdeps/hurd/pt-key.h: Move to sysdeps/generic/pt-key.h. * sysdeps/hurd/pt-getspecific.c: Move to sysdeps/generic/pt-getspecific.c. * sysdeps/hurd/pt-init-specific.c: Move to sysdeps/generic/pt-init-specific.c. * sysdeps/hurd/pt-setspecific.c: Move to sysdeps/generic/pt-setspecific.c.
2017-11-05Add missing internal namesSamuel Thibault
Follow-up 2b7d0800f314e0abf370b2b6f6272a2ddb875464 ('Fix exposing symbols') * sysdeps/generic/pt-mutexattr-destroy.c (__pthread_mutexattr_destroy): Define. (pthread_mutexattr_destroy): Redefine as alias. * sysdeps/generic/pt-mutexattr-init.c (__pthread_mutexattr_init): Define. (pthread_mutexattr_init): Redefine as alias. * sysdeps/generic/pt-mutexattr-settype.c (__pthread_mutexattr_settype): Define. (pthread_mutexattr_settype): Redefine as alias.
2017-09-25Fix symbol expositionSamuel Thibault
* sysdeps/generic/pt-rwlock-rdlock.c (pthread_rwlock_rdlock): Make alias weak. * sysdeps/generic/pt-rwlock-unlock.c (pthread_rwlock_unlock): Likewise. * sysdeps/generic/pt-rwlock-wrlock.c (pthread_rwlock_wrlock): Likewise. * sysdeps/generic/sem-timedwait.c (sem_timedwait): Likewise. * sysdeps/generic/pt-rwlock-timedrdlock.c (pthread_rwlock_timedrdlock): Make it a weak alias. * sysdeps/generic/pt-rwlock-timedwrlock.c (pthread_rwlock_timedwrlock): Likewise.
2017-09-24Fix symbols exposed in linkspaceSamuel Thibault
Libc uses some thread functions, but should not expose the corresponding symbols, so use aliases. * Versions (__cthread_detach, __cthread_fork, __cthread_keycreate, __cthread_getspecific, __cthread_setspecific, __pthread_getattr_np, __pthread_attr_getstack): Add symbols * pthread/cthreads-compat.c (cthread_t, cthread_fn_t, cthread_key_t): Do not define. (cthread_detach): Rename to __cthread_detach. (cthread_detach): Define as weak alias to __cthread_detach. (cthread_fork, cthread_keycreate, cthread_getspecific, cthread_setspecific): Likewise. * pthread/pt-getattr.c (pthread_getattr_np): Likewise. * sysdeps/generic/pt-attr-getstack.c (pthread_attr_getstack): Likewise. * sysdeps/pthread/pthread.h (__cthread_t, __cthread_key_t, __cthread_fn_t, __cthread_fork, __cthread_detach, __cthread_keycreate, __cthread_getspecific, __cthread_setspecific, __pthread_getattr_np, __pthread_attr_getstack): Declare.
2017-09-03Fix build with glibc 2.26Samuel Thibault
* sysdeps/generic/pt-attr.c (__pthread_default_attr.__schedparam): Use __sched_priority field name instead of sched_priority.
2017-08-28Implement basic pthread_getschedparamSamuel Thibault
* sysdeps/generic/pt-getschedparam.c (__pthread_getschedparam): Return SCHED_OTHER and priority 0. Remove stub warning.
2016-10-24Do not pthread_self when raise is called before libpthread initSamuel Thibault
* Versions (__pthread_threads): Add in GLIBC_PRIVATE. * pthreadP.h (__pthread_threads): Declare. * sysdeps/generic/raise.c (__pthread_threads): Make symbol weak. (raise): Check for __pthread_threads before calling __pthread_self.
2016-10-18Fix unregistering atfork handlers on library unloadSamuel Thibault
* sysdeps/generic/old_pt-atfork.c: New file. * Makefile (libpthread-routines): Add old_pt-atfork. (libpthread-static-only-routines): Add pt-atfork. [build-shared=yes] (install): Explicit $(inst_libdir)/libpthread.so [build-shared=yes] $(inst_libdir)/libpthread.so: Replace with script to link libpthread_nonshared.a in. [build-shared=yes] (tests): Link libpthread_nonshared.a in addition to libpthread.so. (generated): Add libpthread_nonshared.a.
2016-10-10Fix warningSamuel Thibault
* sysdeps/generic/pt-atfork.c: Include <fork.h>
2016-10-09Add unregistering atfork handlers on dlcloseSamuel Thibault
* sysdeps/generic/fork.h: New file. * forward.c: Include <fork.h>. (__unregister_atfork): New function.
2016-09-19Fix pthread_kill and pthread_self visibility from raiseSamuel Thibault
* pthreadP.h: New file. * sysdeps/generic/pt-kill.c (pthread_kill): Rename to __pthread_kill. pthread_kill: New strong alias. * sysdeps/hurd/pt-kill.c: Likewise. * sysdeps/generic/raise.c: Include <pthreadP.h> instead of <pthread.h>. Make __pthread_kill and __pthread_self weak. (raise): Use __pthread_kill and __pthread_self instead of pthread_kill and pthread_self.
2016-09-11Add dso_handle parameter to __register_atforkSamuel Thibault
* forward.c (struct atfork): Add dso_handle field. (__register_atfork): Add dso_handle parameter. Store it it dso_handle field. * sysdeps/generic/pt-atfork.c (__dso_handle): New variable. (pthread_atfork): Pass address of __dso_handle to __register_atfork.
2015-11-25Fix build with hidden supportSamuel Thibault
* sysdeps/generic/pt-key-create.c (pthread_key_create): Rename to __pthread_key_create. (pthread_key_create): New strong_alias. * sysdeps/generic/raise.c (raise): Add libc_hidden_def. (gsignal): Add weak_alias. * sysdeps/hurd/pt-key-create.c (__pthread_key_create): Remove hidden_def.
2015-10-10Fix errno set by raiseSamuel Thibault
* sysdeps/generic/raise.c: Include <signal.h> and <unistd.h>. (raise): Only set errno when calling pthread_kill, not kill.
2015-09-01Fix spurious dependency of libc on libpthreadSamuel Thibault
* sysdeps/generic/raise.c (pthread_self): Make reference weak.
2015-09-01Fix raise thread-aware implementationSamuel Thibault
* sysdeps/generic/raise.c (pthread_kill): Make ref weak. (raise): Only call pthread_kill when it is not NULL. Call kill otherwise.
2015-09-01Drop debugging statementsSamuel Thibault
* sysdeps/generic/raise.c (raise): Do not call debug.
2015-09-01Fix raise.c buildSamuel Thibault
* sysdeps/generic/raise.c: Include <pthread.h> instead of non-existing "sig-internal.h"
2015-09-01Remove more unused signals implementationSamuel Thibault
* sysdeps/generic/killpg.c: Remove file. * sysdeps/generic/sigaddset.c: Likewise. * sysdeps/generic/sigdelset.c: Likewise. * sysdeps/generic/sigemptyset.c: Likewise. * sysdeps/generic/sigfillset.c: Likewise. * sysdeps/generic/siginterrupt.c: Likewise. * sysdeps/generic/sigismember.c: Likewise. * sysdeps/generic/signal.c: Likewise. * sysdeps/generic/sigwait.c: Likewise.
2015-03-23Fix safety of pthread_onceSamuel Thibault
* sysdeps/generic/pt-once.c (__pthread_once): Call __memory_barrier before testing the __run field.
2015-03-22Move headers from generic/ to pthread/Samuel Thibault
So that the glibc makerules can find them instead of using the system ones. * sysdeps/generic/bits/barrier-attr.h: Move to... * sysdeps/pthread/bits/barrier-attr.: ... here. * sysdeps/generic/bits/barrier.h: Move to... * sysdeps/pthread/bits/barrier.: ... here. * sysdeps/generic/bits/cancelation.h: Move to... * sysdeps/pthread/bits/cancelation.: ... here. * sysdeps/generic/bits/condition-attr.h: Move to... * sysdeps/pthread/bits/condition-attr.: ... here. * sysdeps/generic/bits/condition.h: Move to... * sysdeps/pthread/bits/condition.: ... here. * sysdeps/generic/bits/mutex-attr.h: Move to... * sysdeps/pthread/bits/mutex-attr.: ... here. * sysdeps/generic/bits/mutex.h: Move to... * sysdeps/pthread/bits/mutex.: ... here. * sysdeps/generic/bits/once.h: Move to... * sysdeps/pthread/bits/once.: ... here. * sysdeps/generic/bits/pthread-np.h: Move to... * sysdeps/pthread/bits/pthread-np.: ... here. * sysdeps/generic/bits/pthread.h: Move to... * sysdeps/pthread/bits/pthread.: ... here. * sysdeps/generic/bits/pthreadtypes.h: Move to... * sysdeps/pthread/bits/pthreadtypes.: ... here. * sysdeps/generic/bits/rwlock-attr.h: Move to... * sysdeps/pthread/bits/rwlock-attr.: ... here. * sysdeps/generic/bits/rwlock.h: Move to... * sysdeps/pthread/bits/rwlock.: ... here. * sysdeps/generic/bits/semaphore.h: Move to... * sysdeps/pthread/bits/semaphore.: ... here. * sysdeps/generic/bits/thread-attr.h: Move to... * sysdeps/pthread/bits/thread-attr.: ... here. * sysdeps/generic/bits/thread-specific.h: Move to... * sysdeps/pthread/bits/thread-specific.: ... here.
2015-03-22Avoid exposing internals of structuresSamuel Thibault
* sysdeps/generic/bits/barrier-attr.h (__pthread_barrierattr): Rename `pshared' field to `__pshared'. * sysdeps/generic/bits/barrier.h (__pthread_barrier): Rename `lock', `'queue', `pending', `count', `attr', and `data' fields to `__lock', `__queue', `__pending', `__count', `__attr', and `__data'. * sysdeps/generic/bits/cancelation.h (__pthread_cancelation_handler): Rename `handler', `arg', and `next' fields to `__handler', `__arg', and `__next'. * sysdeps/generic/bits/condition-attr.h (__pthread_condattr): Rename `pshared' and `clock' fields to `__pshared', and `__clock'. * sysdeps/generic/bits/mutex-attr.h (__pthread_mutexattr): Rename `prioceiling', `protocol', `pshared', and `mutex_type' fields to `__prioceiling', `__protocol', `__pshared', and `__mutex_type'. * sysdeps/generic/bits/mutex.h (__pthread_mutex): Rename `cthreadscompat1', `attr', `data', `owner', and `locks' fields to `__cthreadscompat1', `__attr', `__data', `__owner', and `__locks'. * sysdeps/generic/bits/once.h (__pthread_once): Rename `run' and `lock' fields to `__run' and `__lock'. * sysdeps/generic/bits/rwlock-attr.h (__pthread_rwlockattr): Rename `psharead' field to `__pshared'. * sysdeps/generic/bits/rwlock.h (__pthread_rwlock): Rename `readers', `readerqueue', and `writerqueue' fields to `__readers', `__readerqueue', and `__writerqueue'. * sysdeps/generic/bits/thread-attr.h (__pthread_contentionscope): Rename `schedparam', `stackaddr', `stacksize', `guardsize', `detachstate', `inheritsched', `contentionscope', and `schedpolicy' fields to `__schedparam', `__stackaddr', `__stacksize', `__guardsize', `__detachstate', `__inheritsched', `__contentionscope', and `__schedpolicy''. * sysdeps/generic/bits/cancelation.h: Update code accordingly. * pthread/pt-create.c: Likewise. * pthread/pt-exit.c: Likewise. * pthread/pt-getattr.c: Likewise. * sysdeps/generic/pt-attr-getdetachstate.c: Likewise. * sysdeps/generic/pt-attr-getguardsize.c: Likewise. * sysdeps/generic/pt-attr-getinheritsched.c: Likewise. * sysdeps/generic/pt-attr-getschedparam.c: Likewise. * sysdeps/generic/pt-attr-getschedpolicy.c: Likewise. * sysdeps/generic/pt-attr-getscope.c: Likewise. * sysdeps/generic/pt-attr-getstackaddr.c: Likewise. * sysdeps/generic/pt-attr-getstacksize.c: Likewise. * sysdeps/generic/pt-attr-setdetachstate.c: Likewise. * sysdeps/generic/pt-attr-setguardsize.c: Likewise. * sysdeps/generic/pt-attr-setinheritsched.c: Likewise. * sysdeps/generic/pt-attr-setschedparam.c: Likewise. * sysdeps/generic/pt-attr-setschedpolicy.c: Likewise. * sysdeps/generic/pt-attr-setscope.c: Likewise. * sysdeps/generic/pt-attr-setstackaddr.c: Likewise. * sysdeps/generic/pt-attr-setstacksize.c: Likewise. * sysdeps/generic/pt-attr.c: Likewise. * sysdeps/generic/pt-barrier-init.c: Likewise. * sysdeps/generic/pt-barrier-wait.c: Likewise. * sysdeps/generic/pt-barrier.c: Likewise. * sysdeps/generic/pt-barrierattr-getpshared.c: Likewise. * sysdeps/generic/pt-barrierattr-setpshared.c: Likewise. * sysdeps/generic/pt-cond-timedwait.c: Likewise. * sysdeps/generic/pt-cond.c: Likewise. * sysdeps/generic/pt-condattr-getclock.c: Likewise. * sysdeps/generic/pt-condattr-getpshared.c: Likewise. * sysdeps/generic/pt-condattr-setclock.c: Likewise. * sysdeps/generic/pt-condattr-setpshared.c: Likewise. * sysdeps/generic/pt-mutex-destroy.c: Likewise. * sysdeps/generic/pt-mutex-init.c: Likewise. * sysdeps/generic/pt-mutex-timedlock.c: Likewise. * sysdeps/generic/pt-mutex-transfer-np.c: Likewise. * sysdeps/generic/pt-mutex-trylock.c: Likewise. * sysdeps/generic/pt-mutex-unlock.c: Likewise. * sysdeps/generic/pt-mutexattr-getprotocol.c: Likewise. * sysdeps/generic/pt-mutexattr-getpshared.c: Likewise. * sysdeps/generic/pt-mutexattr-gettype.c: Likewise. * sysdeps/generic/pt-mutexattr-setprotocol.c: Likewise. * sysdeps/generic/pt-mutexattr-setpshared.c: Likewise. * sysdeps/generic/pt-mutexattr-settype.c: Likewise. * sysdeps/generic/pt-mutexattr.c: Likewise. * sysdeps/generic/pt-once.c: Likewise. * sysdeps/generic/pt-rwlock-attr.c: Likewise. * sysdeps/generic/pt-rwlock-timedrdlock.c: Likewise. * sysdeps/generic/pt-rwlock-timedwrlock.c: Likewise. * sysdeps/generic/pt-rwlock-tryrdlock.c: Likewise. * sysdeps/generic/pt-rwlock-trywrlock.c: Likewise. * sysdeps/generic/pt-rwlock-unlock.c: Likewise. * sysdeps/generic/pt-rwlockattr-getpshared.c: Likewise. * sysdeps/generic/pt-rwlockattr-setpshared.c: Likewise. * sysdeps/mach/hurd/pt-attr-setstackaddr.c: Likewise. * sysdeps/mach/hurd/pt-attr-setstacksize.c: Likewise. * sysdeps/mach/hurd/pt-hurd-cond-timedwait.c: Likewise.
2015-03-22Fix compilation in posix 1995 modeSamuel Thibault
* sysdeps/generic/bits/thread-attr.h: Define __need_size_t macro, include <stddef.h>.
2015-03-01Forward lockfile calls from libc to dynamically loaded libpthreadSamuel Thibault
* forward.c: (__libc_pthread_functions_init): Add variable (FORWARD2): Use __libc_pthread_functions_init instead of testing __libc_pthread_functions.ptr_##name value. (FORWARD_NORETURN): Add macro. (pthread_exit): Use FORWARD_NORETURN instead of FORWARD2. * libc_pthread_init.c (__libc_pthread_init): Set __libc_pthread_functions_init to 1. * pthread/pthread-functions.h (__pthread_once, __pthread_rwlock_rdlock, __pthread_rwlock_wrlock, __pthread_rwlock_unlock, __pthread_key_create, __pthread_getspecific, __pthread_setspecific, _cthreads_flockfile, _cthreads_funlockfile, _cthreads_ftrylockfile): Add prototypes. (pthread_functions): Add ptr_pthread_once, ptr_pthread_rwlock_rdlock, ptr_pthread_rwlock_wrlock, ptr_pthread_rwlock_unlock, ptr_pthread_key_create, ptr_pthread_getspecific, ptr_pthread_setspecific, ptr__IO_flockfile, ptr__IO_funlockfile, ptr__IO_ftrylockfile. (__libc_pthread_functions_init): Add variable declaration. (PTHFCT_CALL): Add macro. * pthread/pt-initialize.c (pthread_functions): Initialize ptr_pthread_once, ptr_pthread_rwlock_rdlock, ptr_pthread_rwlock_wrlock, pthread_rwlock_unlock, ptr_ptr_pthread_key_create, pthread_getspecific, ptr_pthread_setspecific, ptr_ptr__IO_flockfile, _IO_funlockfile, ptr__IO_ftrylockfile. * sysdeps/generic/pt-once.c (pthread_once): Rename to __pthread_once (pthread_once): Add strong alias. * sysdeps/generic/pt-rwlock-rdlock.c (pthread_rwlock_rdlock): Rename to __pthread_rwlock_rdlock (pthread_rwlock_rdlock): Add strong alias. * sysdeps/generic/pt-rwlock-wrlock.c (pthread_rwlock_wrlock): Rename to __pthread_rwlock_wrlock (pthread_rwlock_wrlock): Add strong alias. * sysdeps/generic/pt-rwlock-unlock.c (pthread_rwlock_unlock): Rename to __pthread_rwlock_unlock (pthread_rwlock_unlock): Add strong alias. * sysdeps/generic/pt-getspecific.c (pthread_getspecific): Rename to __pthread_getspecific (pthread_getspecific): Add strong alias. * sysdeps/generic/pt-setspecific.c (pthread_setspecific): Rename to __pthread_setspecific (pthread_setspecific): Add strong alias. * sysdeps/pthread/flockfile.c: Add file. * sysdeps/pthread/ftrylockfile.c: Add file. * sysdeps/pthread/funlockfile.c: Add file.
2014-11-02Fix safety of pthread_barrier_waitSamuel Thibault
The barrier queue uses threads' next field, so it can not actually be safely walked without holding the barrier lock. * sysdeps/generic/pt-barrier-wait.c (pthread_barrier_wait): Record an array of __pthread to wake while holding the lock, and wake them only after unlocking it.
2014-11-02Wake up queued threads without spin lock heldSamuel Thibault
so that they may have a chance to actually preempt us. Otherwise they will merely immediately fail to acquire the spin lock, and thus preemption will have served no purpose. * sysdeps/generic/pt-rwlock-unlock.c (pthread_rwlock_unlock): Record an array of __pthread to wake while holding the lock, and wake them only after unlocking it.
2014-11-02Wake up queued threads without spin lock heldSamuel Thibault
so that they may have a chance to actually preempt us. Otherwise they will merely immediately fail to acquire the spin lock, and thus preemption will have served no purpose. * sysdeps/generic/pt-cond-brdcast.c (__pthread_cond_broadcast): Unlock cond->__lock while waking the queued thread.
2014-09-28Fetch stack size from rlimitSamuel Thibault
* pthread/pt-create.c: Include <hurd/resource.h> (__pthread_create_internal): When `attr''s stacksize is 0, try to get the desired size from the RLIMIT_STACK rlimit before defaulting to PTHREAD_STACK_DEFAULT. * sysdeps/generic/pt-attr.c (__pthread_default_attr): Set stacksize to 0 instead of PTHREAD_STACK_DEFAULT.
2014-05-02Fix guardsize semanticSamuel Thibault
POSIX says guardsize is in addition to stacksize, not included. * pthread/pt-create.c (__pthread_create_internal): Use setup->guardsize + setup->stacksize as stack allocation size. Do not truncate guardsize to stacksize. * pthread/pt-internal.h (guardsize): Remove comment. * sysdeps/generic/pt-attr-setstacksize.c (pthread_attr_setstacksize): Do not truncate guardsize to stacksize.
2014-04-04Use only clock_gettime, do not depend on librtSamuel Thibault
clock_gettime is actually provided by libc, not librt, so we don't need the latter, and thus avoid the librt dependency, which would cause initialization issues. * sysdeps/generic/pt-condattr-setclock.c (pthread_condattr_setclock): Use clock_gettime instead of clock_getres to test for clock availability. * Makefile: Do not link against librt.
2014-01-01Merge branch 'tmp'Samuel Thibault
2014-01-01Add warnings about non-implemented functions.Samuel Thibault
* sysdeps/generic/pt-getcpuclockid.c (pthread_getcpuclockid): Add warning stub. * sysdeps/generic/pt-getschedparam.c (pthread_getschedparam): Likewise. * sysdeps/generic/pt-key-create.c (pthread_key_create): Likewise. * sysdeps/generic/pt-key-delete.c (pthread_key_delete): Likewise. * sysdeps/generic/pt-mutex-getprioceiling.c (pthread_mutex_getprioceiling): Likewise. * sysdeps/generic/pt-mutex-setprioceiling.c (pthread_mutex_setprioceiling): Likewise. * sysdeps/generic/pt-mutexattr-getprioceiling.c (pthread_mutexattr_getprioceiling): Likewise. * sysdeps/generic/pt-mutexattr-setprioceiling.c (pthread_mutexattr_setprioceiling): Likewise. * sysdeps/generic/pt-setschedparam.c (pthread_setschedparam): Likewise. * sysdeps/generic/pt-setschedprio.c (pthread_setschedprio): Likewise.
2013-12-29Revert "Allow applications to set the default stack size"Richard Braun
This reverts commit 536420a581f9f822cdef0fc460b5176a840f49e5. Now that threadvars have been replaced with TLS, this hack is no longer needed.
2013-10-20Drop threadvars entirelySamuel Thibault
2013-09-21Add pthread_atfork supportSamuel Thibault
* Versions (libc): Add __register_atfork with GLIBC_PRIVATE version. * forward.c: Include <errno.h> (atfork): New structure. (atfork_lock): New mutex. (fork_handlers, fork_last_handler): New variables. (atfork_pthread_prepare, atfork_pthread_parent, atfork_pthread_child): New atfork hooks (__register_atfork): New function. * sysdeps/generic/pt-atfork.c (pthread_atfork): Call __register_atfork.
2013-02-04Fix pthread timeout handling and cancellation issuesRichard Braun
This patch solves two issues. The first one is cancellation handling when a cancellation request is sent before reaching a cancellation point (namely, pthread_cond_{timed,}wait). Cancellation is implemented by pushing an appropriate cleanup handler and switching to PTHREAD_CANCEL_ASYNCHRONOUS type. The main problem is that it doesn't handle pending requests, only a cancellation that occurs while blocking. Other problems occur when trying to correctly handle a timeout and a cancellation request through the cleanup routine. The other issue is correctly handling timeouts. This problem was already well known, as explained by the following comment : "FIXME: What do we do if we get a wakeup message before we disconnect ourself? It may remain until the next time we block." In addition, the prevp thread member is inconsistently used. It is sometimes accessed while protected by the appropriate queue lock to determine whether a thread is still queued, while at times, threads are unqueued without holding a lock, as in pthread_cond_broadcast : /* We can safely walk the list of waiting threads without holding the lock since it is now decoupled from the condition. */ __pthread_dequeuing_iterate (wakeup, wakeup) __pthread_wakeup (wakeup); This is the root cause that triggers some assertion failures. The solution brought by this patch is to consistently use the prevp link to determine if both a thread has been unqueued and if a wakeup message has been sent (both are needed to wake up a thread). A thread unblocked because of a timeout can now accurately determine if it needs to drain its message queue. A direct improvement is that the message queue size can be limited to one message, and wakeups are guaranteed to be non-blocking, which allows safely calling __pthread_wakeup from critical sections. As it now affects the cleanup cancellation routine of __pthread_cond_timedwait_internal, cancellation is reworked as well. Cancellation type is forced to PTHREAD_CANCEL_DEFERRED during the call, and actually checked on both entry and return. A hook is set by the blocking thread so that the waker doesn't need to know about the call implementation. Cancellation members are now protected with a mutex for truely safe access. * pthread/pt-alloc.c (initialize_pthread): Initialize the new `cancel_lock', `cancel_hook' and `cancel_hook_args' fields. * pthread/pt-cancel.c (pthread_cancel): Rework cancellation handling. * pthread/pt-internal.h (struct __pthread): Add `cancel_lock', `cancel_hook' and `cancel_hook_args' fields. (__pthread_dequeue): Assert thread->prevp isn't NULL. * pthread/pt-join.c (pthread_join): Describe how the cancellation point is implemented. * pthread/pt-setcancelstate.c (__pthread_setcancelstate): Lock the given thread cancellation lock when switching state. * pthread/pt-setcanceltype.c (__pthread_setcanceltype): Likewise for cancellation type. * pthread/pt-testcancel.c (pthread_testcancel): Likewise for pending cancellations. * sysdeps/generic/pt-cond-brdcast.c (__pthread_cond_broadcast): Dequeue and wake up threads with condition locked. * sysdeps/generic/pt-cond-signal.c (cond_signal): Remove function, move implementation to ... (__pthread_cond_signal): ... this function. Remove unused `unblocked' variable. * sysdeps/generic/pt-cond-timedwait.c (struct cancel_ctx): New structure. (cancel_hook): New static function. (__pthread_cond_timedwait_internal): Fix cancellation and timeout handling. * sysdeps/generic/pt-mutex-timedlock.c (__pthread_mutex_timedlock_internal): Fix timeout handling. * sysdeps/generic/pt-rwlock-timedrdlock.c (__pthread_rwlock_timedrdlock_internal): Likewise. * sysdeps/generic/pt-rwlock-timedwrlock.c (__pthread_rwlock_timedwrlock_internal): Likewise. * sysdeps/generic/pt-rwlock-unlock.c (pthread_rwlock_unlock): Dequeue and wake up threads with rwlock internal lock held. * sysdeps/generic/sem-timedwait.c (__sem_timedwait_internal): Fix timeout handling. * sysdeps/mach/hurd/pt-docancel.c (__pthread_do_cancel): Unlock the given thread cancellation lock. * sysdeps/mach/pt-thread-alloc.c (create_wakeupmsg): Limit the message queue size of the wakeup port to 1. * sysdeps/mach/pt-wakeup.c (__pthread_wakeup): Call __mach_msg in a non-blocking way.
2012-11-25Allow applications to set the default stack sizeRichard Braun
This change is a temporary hack intended for the Hurd servers. Once Hurd threadvars are replaced with TLS, this commit should be reverted. * pthread/pt-internal.h (__pthread_default_attr): Remove const qualifier. * sysdeps/generic/pt-attr.c (__pthread_default_attr): Likewise. * sysdeps/mach/hurd/pt-sysdep.c (__pthread_stack_default_size): New variable. (init_routine): Set __pthread_default_attr.stacksize if __pthread_stack_default_size exists.
2012-07-08Default to a little guardsizeSamuel Thibault
Later rounded up to a page. * sysdeps/generic/pt-attr.c (__pthread_default_attr) [!PAGESIZE]: Set guardsize field to 1.