Age | Commit message (Collapse) | Author |
|
* 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.
|
|
* 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.
|
|
* 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.
|
|
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>
|
|
* 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>
|
|
* 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.
|
|
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.
|
|
* 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
|
|
* sysdeps/generic/timer_routines.h: New file.
|
|
* 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.
|
|
|
|
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
|
|
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.
|
|
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.
|
|
* 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.
|
|
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.
|
|
* sysdeps/generic/pt-attr.c
(__pthread_default_attr.__schedparam): Use __sched_priority
field name instead of sched_priority.
|
|
* sysdeps/generic/pt-getschedparam.c (__pthread_getschedparam): Return
SCHED_OTHER and priority 0. Remove stub warning.
|
|
* 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.
|
|
* 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.
|
|
* sysdeps/generic/pt-atfork.c: Include <fork.h>
|
|
* sysdeps/generic/fork.h: New file.
* forward.c: Include <fork.h>.
(__unregister_atfork): New function.
|
|
* 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.
|
|
* 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.
|
|
* 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.
|
|
* sysdeps/generic/raise.c: Include <signal.h> and <unistd.h>.
(raise): Only set errno when calling pthread_kill, not kill.
|
|
* sysdeps/generic/raise.c (pthread_self): Make reference weak.
|
|
* sysdeps/generic/raise.c (pthread_kill): Make ref weak.
(raise): Only call pthread_kill when it is not NULL. Call kill otherwise.
|
|
* sysdeps/generic/raise.c (raise): Do not call debug.
|
|
* sysdeps/generic/raise.c: Include <pthread.h> instead of non-existing
"sig-internal.h"
|
|
* 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.
|
|
* sysdeps/generic/pt-once.c (__pthread_once): Call __memory_barrier before
testing the __run field.
|
|
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.
|
|
* 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.
|
|
* sysdeps/generic/bits/thread-attr.h: Define __need_size_t macro, include
<stddef.h>.
|
|
* 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.
|
|
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.
|
|
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.
|
|
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.
|
|
* 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.
|
|
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.
|
|
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.
|
|
|
|
* 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.
|
|
This reverts commit 536420a581f9f822cdef0fc460b5176a840f49e5.
Now that threadvars have been replaced with TLS, this hack is no
longer needed.
|
|
|
|
* 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.
|
|
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.
|
|
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.
|
|
Later rounded up to a page.
* sysdeps/generic/pt-attr.c (__pthread_default_attr) [!PAGESIZE]: Set guardsize
field to 1.
|