History log of /src/lib/libpthread/pthread_mutex.c |
Revision | | Date | Author | Comments |
1.83 |
| 10-Apr-2022 |
riastradh | pthread: Nix trailing whitespace.
|
1.82 |
| 12-Feb-2022 |
riastradh | libpthread: Move namespacing include to top of .c files.
Stuff like libc's namespace.h, or atomic_op_namespace.h, which does namespacing tricks like `#define atomic_cas_uint _atomic_cas_uint', has to go at the top of each .c file. If it goes in the middle, it might be too late to affect the declarations, and result in compile errors.
I tripped over this by including <sys/atomic.h> in mips <machine/lock.h>.
(Maybe we should create a new pthread_namespace.h file for the purpose, but this'll do for now.)
|
1.81 |
| 11-Jun-2020 |
ad | Adjust memory barriers.
|
1.80 |
| 10-Jun-2020 |
ad | - Make pthread_condvar and pthread_mutex work on the stack rather than in pthread_t, so there's less chance of bad things happening if someone calls (for example) pthread_cond_broadcast() from a signal handler.
- Remove all the deferred waiter handling except for the one case that really matters which is transferring waiters from condvar -> mutex on wakeup, and do that by splicing the condvar's waiters onto the mutex.
- Remove the mutex waiters bit as it's another complication that's not strictly needed.
|
1.79 |
| 03-Jun-2020 |
ad | Deal with a couple of problems with threads being awoken early due to timeouts or cancellation where:
- The restarting thread calls _lwp_exit() before another thread gets around to waking it with _lwp_unpark(), leading to ESRCH (observed by joerg@). (I may have removed a similar check mistakenly over the weekend.)
- The restarting thread considers itself gone off the sleep queue but at the same time another thread is part way through waking it, and hasn't fully completed that operation yet by setting thread->pt_mutexwait = 0. I think that could have potentially lead to the list of waiters getting messed up given the right circumstances.
|
1.78 |
| 01-Jun-2020 |
ad | In the interests of reliability simplify waiter handling more and redo condvars to manage the list of waiters with atomic ops.
|
1.77 |
| 16-May-2020 |
ad | - Try to eliminate a hang in "parked" I've been seeing while stress testing. Centralise wakeup of deferred waiters in pthread__clear_waiters() and use throughout libpthread. Make fewer assumptions. Be more conservative in pthread_mutex when dealing with pending waiters.
- Remove the "hint" argument everywhere since the kernel doesn't use it any more.
|
1.76 |
| 16-Feb-2020 |
kamil | Revert "Enhance the pthread(3) + malloc(3) init model"
It is reported to hand on aarch64 with gzip.
|
1.75 |
| 15-Feb-2020 |
kamil | Enhance the pthread(3) + malloc(3) init model
Separate the pthread_atfork(3) call from pthread_tsd_init() and move it into a distinct function.
Call inside pthread__init() late TSD initialization route, just after "pthread_atfork(NULL, NULL, pthread__fork_callback);".
Document that malloc(3) initialization is now controlled again and called during the first pthread_atfork(3) call.
Remove #if 0 code from pthread_mutex.c as we no longer initialize malloc prematurely.
|
1.74 |
| 01-Feb-2020 |
kamil | Revert previous
'git grep' breaks now.
|
1.73 |
| 01-Feb-2020 |
kamil | Remove 'ifdef 0' hacks
It is no longer needed as the proper fix avoiding premature malloc() landed the sources.
|
1.72 |
| 31-Jan-2020 |
kamil | Refactor libpthread checks for invalid arguments
Switch from manual functions to pthread__error().
|
1.71 |
| 31-Jan-2020 |
christos | In the same spirit as the previous pthread_mutex_init change for jemalloc, make pthread_mutexattr_init do always a full initialization, so that the attribute that will be used later when we become threaded is properly initialized.
|
1.70 |
| 29-Jan-2020 |
kamil | Use pthread_mutexattr_t and pthread_mutex_t magic fields
Validate _PT_MUTEX_MAGIC in pthread_mutex_t and _PT_MUTEXATTR_MAGIC in pthread_mutexattr_t accordingly.
|
1.69 |
| 29-Jan-2020 |
kamil | Mark destroyed pthread_mutexattr_t as dead
|
1.68 |
| 25-Jan-2020 |
ad | Adjustment to previous: don't call _lwp_unpark_all() with nwaiters == 0.
|
1.67 |
| 25-Jan-2020 |
ad | pthread__mutex_unlock_slow(): ignore the DEFERRED bit. It's only purpose is to get the thread to go through the slow path. If there are waiters, process them there and then. Should not affect well behaved apps. Maybe of help for:
PR bin/50350: rump/rumpkern/t_sp/stress_{long,short} fail on Core 2 Quad
|
1.66 |
| 13-Jan-2020 |
ad | Rip out some very ambitious optimisations around pthread_mutex that are don't buy much. This stuff is hard enough to get right in the kernel let alone userspace, and I don't trust that it's right.
|
1.65 |
| 05-Mar-2019 |
christos | branches: 1.65.2; Jemalloc initializes mutexes before we become threaded and expects to use them later.
|
1.64 |
| 08-Dec-2017 |
kre | branches: 1.64.4;
Deal with more lwp_park() timestamp unconsting
|
1.63 |
| 31-Oct-2016 |
christos | Don't spin if we already own the mutex, otherwise we will get stuck spinning forever, fixes timemutex{1,2} tests.
|
1.62 |
| 17-Jul-2016 |
skrll | Use anonymous union for ptm_ceiling and old __pthread_spin_t field to maintain backward compatibility and fix hppa build. hppa has an non- integer type __pthread_spin_t
|
1.61 |
| 16-Jul-2016 |
skrll | KNF
|
1.60 |
| 03-Jul-2016 |
christos | branches: 1.60.2; GSoC 2016 Charles Cui: Implement thread priority protection based on work by Andy Doran. Also document the get/set pshared thread calls as not implemented, and add a skeleton implementation that is disabled. XXX: document _sched_protect(2).
|
1.59 |
| 03-Feb-2014 |
rmind | pthread__mutex_lock_slow: fix the handling of a potential race with the non-interlocked CAS in the fast unlock path -- it is unsafe to test for the waiters-bit while the owner thread is running, we have to spin for the owner or its state change to be sure about the presence of the bit. Split off the logic into the pthread__mutex_setwaiters() routine.
This is a partial fix to the named lockup problem (also see PR/44756). It seems there is another race which can be reproduced on faster CPUs.
|
1.58 |
| 31-Jan-2014 |
christos | remove compatibility code for handling CLOCK_MONOTONIC and handle it in the syscall directly.
|
1.57 |
| 31-Jan-2014 |
christos | PR/44756: Sad Clouds: Prevent leakage of errno = ESRCH from _lwp_park. This has two parts: - in pthread_cond_timedwait() if the thread we are trying to unpark exited, retry the the _lwp_park call without it. - pthread_mutex() was affecting errno since it is calling _lwp_park() from pthread_mutex_lock_slow(). preserve the original errno. Note that the example problem still causes an occassional deadlock on machines with many CPUs and it is the same deadlock we observe with named.
|
1.56 |
| 21-Mar-2013 |
christos | - Allow libpthread to be dlopened again, by providing libc stubs to libpthread. - Fail if the dlopened libpthread does pthread_create(). From manu@ - Discussed at length in the mailing lists; approved by core@ - This was chosen as the least intrusive patch that will provide the necessary functionality. XXX: pullup to 6
|
1.55 |
| 06-Mar-2013 |
yamt | add comments whitespace
|
1.54 |
| 16-Aug-2012 |
matt | branches: 1.54.2; Add a pthread__smt_wake and add support for it on arm along with pthread__smt_pause. These are implemented using the ARM instructions SEV (wake) and WFE (pause). These are treated as NOPs on ARM CPUs that don't support them.
|
1.53 |
| 13-Mar-2012 |
joerg | Move the pthread_once alias where it belongs.
|
1.52 |
| 12-Mar-2012 |
joerg | Move pthread_once implementation into a separate file, it doesn't depend on the mutex implementation in any way.
|
1.51 |
| 02-Aug-2008 |
matt | branches: 1.51.2; 1.51.4; 1.51.6; 1.51.22; Change pthread_mutex_t to use the amount of space as and be congruent to the version used in the SA version of pthreads. This preserves binary compatibility between both versions of the library.
|
1.50 |
| 25-May-2008 |
ad | PR lib/38741 priority inversion in libpthread breaks apps that use SCHED_FIFO threads
- Change condvar sync so that we never take the condvar's spinlock without first holding the caller-provided mutex. Previously, the spinlock was only taken without the mutex in an error path, but it was enough to trigger the problem described in the PR.
- Even with this change, applications calling pthread_cond_signal/broadcast without holding the interlocking mutex are still subject to the problem described in the PR. POSIX discourages this saying that it leads to undefined scheduling behaviour, which seems good enough for the time being.
- Elsewhere, use a hash of mutexes instead of per-object spinlocks to synchronize entry/exit from sleep queues.
- Simplify how sleep queues are maintained.
|
1.49 |
| 25-May-2008 |
ad | Add some general comments about the mutex implementation.
|
1.48 |
| 28-Apr-2008 |
martin | branches: 1.48.2; Remove clause 3 and 4 from TNF licenses
|
1.47 |
| 07-Mar-2008 |
ad | branches: 1.47.2; pthread__mutex_lock_slow:
- don't stop spinning if there are already waiters on the mutex, there is no point. - cosmetic change.
|
1.46 |
| 23-Feb-2008 |
ad | Fix pthread_mutex_trylock() for recursive mutexes. PR lib/38087. Based on a patch provided by rafal@.
|
1.45 |
| 14-Feb-2008 |
ad | branches: 1.45.2; Adjust mutex/rwlock definitions to match reality now that there is only one implementation of each. PR lib/38030.
|
1.44 |
| 10-Feb-2008 |
ad | - Remove libpthread's atomic ops. - Remove the old spinlock-based mutex and rwlock implementations. - Use the atomic ops from libc.
|
1.43 |
| 25-Jan-2008 |
rafal | Make this compile after Andrew's fix (remove now-unused variables)
|
1.42 |
| 25-Jan-2008 |
ad | pthread_mutex_lock_slow: remove "deliberate deadlock" code that's not needed with 1:1. PR lib/37524.
|
1.41 |
| 08-Jan-2008 |
christos | add missing static decls.
|
1.40 |
| 05-Jan-2008 |
ad | machine/lock.h, not sys/lock.h
|
1.39 |
| 24-Dec-2007 |
ad | - Fix pthread_rwlock_trywrlock() which was broken.
- Add new functions: pthread_mutex_held_np, mutex_owner_np, rwlock_held_np, rwlock_wrheld_np, rwlock_rdheld_np. These match the kernel's locking primitives and can be used when porting kernel code to userspace.
- Always create LWPs detached. Do join/exit sync mostly in userland. When looped on a dual core box this seems ~30% quicker than using lwp_wait(). Reduce number of lock acquire/release ops during thread exit.
|
1.38 |
| 19-Nov-2007 |
ad | Remove the debuglog stuff. ktrace is more useful now.
|
1.37 |
| 13-Nov-2007 |
ad | For PR bin/37347:
- Override __libc_thr_init() instead of using our own constructor. - Add pthread__getenv() and use instead of getenv(). This is used before we are up and running and unfortunatley getenv() takes locks.
Other changes:
- Cache the spinlock vectors in pthread__st. Internal spinlock operations now take 1 function call instead of 3 (i386). - Use pthread__self() internally, not pthread_self(). - Use __attribute__ ((visibility("hidden"))) in some places. - Kill PTHREAD_MAIN_DEBUG.
|
1.36 |
| 13-Sep-2007 |
ad | Add a per-mutex deferred wakeup flag so that threads doing something like the following do not wake other threads early:
pthread_mutex_lock(&mutex); pthread_cond_broadcast(&cond); foo = malloc(100); /* takes libc mutexes */ pthread_mutex_unlock(&mutex);
|
1.35 |
| 11-Sep-2007 |
ad | Fix inverted test after merge of nick-csl-alignment.
|
1.34 |
| 10-Sep-2007 |
skrll | Merge nick-csl-alignment.
|
1.33 |
| 08-Sep-2007 |
ad | - Get rid of self->pt_mutexhint and use pthread__mutex_owned() instead. - Update some comments and fix minor bugs. Minor cosmetic changes. - Replace some spinlocks with mutexes and rwlocks. - Change the process private semaphores to use mutexes and condition variables instead of doing the synchronization directly. Spinlocks are no longer used by the semaphore code.
|
1.32 |
| 07-Sep-2007 |
ad | - Don't take the mutex's spinlock (ptr_interlock) in pthread_cond_wait(). Instead, make the deferred wakeup list a per-thread array and pass down the lwpid_t's that way.
- In pthread_cond_wait(), take the mutex before dealing with early wakeup. In this way there should never be contention on the CV's spinlock if the app follows POSIX rules (there should only be contention on the user-provided mutex).
- Add a port of the kernel's rwlocks. The rwlock's spinlock is only taken if there is contention. This is enabled where atomic ops are available. Right now that is only i386 and amd64 because I don't have other hardware to test with. It's trivial to add stubs for other architectures as long as they have compare-and-swap. When we have proper atomic ops the old rwlock code can be removed.
- Add a new mutex implementation that's similar to the kernel's mutexes, but uses compare-and-swap to maintain the waiters list, so no spinlocks are involved. Same caveats apply as for the rwlocks.
|
1.31 |
| 16-Aug-2007 |
ad | branches: 1.31.2; One more micro-optimization..
|
1.30 |
| 16-Aug-2007 |
ad | Trim fat off libpthread internal spinlock operations. Makes a mesurable improvement across the board.
|
1.29 |
| 04-Aug-2007 |
ad | branches: 1.29.2; Some significant performance improvements, and a fix for a race with pthread detach/join.
- Make mutex acquire spin for a short time, as done with spinlocks. - Make the number of spins controllable with the env var PTHREAD_NSPINS. - Reduce the amount of time that libpthread internal spinlocks are held. - Rely more on the barrier effects of park/unpark to avoid taking spinlocks. - Simplify the locking around pthreads and the global queues. - Align per-thread sync data on a 128 byte boundary. - Offset thread stacks by a small amount to try and reduce cache thrash.
|
1.28 |
| 24-Mar-2007 |
ad | branches: 1.28.2; - Test+branch is usually cheaper than making an indirect function call, so avoid making them. - When parking an LWP on a condition variable, point the hint argument at the mutex's waiters queue. Chances are we will be awoken from that later.
|
1.27 |
| 20-Mar-2007 |
ad | - Maintain a per-thread pointer to the last mutex acquired by the app, to be used only as as a hint. Clear the pointer when releasing the mutex. - When releasing a mutex, wake all waiters. Makes it possible to tranfer waiters from another object to a mutex.
|
1.26 |
| 05-Mar-2007 |
ad | Update to match changed pthread__park() interface.
|
1.25 |
| 02-Mar-2007 |
ad | Remove the PTHREAD_SA option. If M:N threads is reimplemented it's better off done with a seperate library.
|
1.24 |
| 24-Dec-2006 |
ad | Fix bugs with and improve upon previous.
|
1.23 |
| 23-Dec-2006 |
ad | Conditionalised support for 1:1 threads. Needs associated kernel changes and more work to be useful.
|
1.22 |
| 22-Aug-2006 |
wrstuden | branches: 1.22.2; 1.22.4; Close a window in which we can not notice a recently-slept-on-our mutex thread, thus leaving a thread sleeping on an unlocked mutex.
Reviewed by myself and Christos.
Problem reported by Arne H. Juul, arnej at pvv dot ntnu dot no, in PR 26208. This fix represents option 1 presented in the PR.
|
1.21 |
| 19-Oct-2005 |
chs | branches: 1.21.2; starting the pthread library (ie. calling pthread__start()) before any threads are created turned out to be not such a good idea. there are stronger requirements on what has to work in a forked child while a process is still single-threaded. so take all that stuff back out and fix the problems with single-threaded programs that are linked with libpthread differently, by checking if the library has been started and doing completely different stuff if it hasn't been: - for pthread_rwlock_timedrdlock(), just fail with EDEADLK immediately. - for sem_wait(), the only thing that can unlock the semaphore is a signal handler, so use sigsuspend() to wait for a signal. - for pthread_mutex_lock_slow(), just go into an infinite loop waiting for signals.
I also noticed that there's a "sem2" test that has never worked in its single-threaded form. the problem there is that a signal handler tries to take a sem_t interlock which is already held when the signal is received. fix this too, by adding a single-threaded case for sig_trywait() that blocks signals instead of using the userland interlock.
|
1.20 |
| 16-Oct-2005 |
chs | in pthread_mutex_lock_slow(), pthread_rwlock_timedrdlock() and sem_wait(), call pthread__start() if it hasn't already been called. this avoids an internal assertion from the library if these routines are used before any threads are created and they need to sleep. fixes PR 20256, PR 24241, PR 25722, PR 26096.
|
1.19 |
| 16-Jul-2005 |
nathanw | Add cancellation protection to pthread_once() as per the standard; if the once routine is cancelled, the effect on once_control is as if pthread_once() was never called.
Bug report and fix from PR lib/30734.
|
1.18 |
| 14-Mar-2004 |
cl | branches: 1.18.6; add libpthread part of concurrency support for SA on MP systems - enable concurrency according to environment variable PTHREAD_CONCURRENCY - add idle VP wakeup if there are additional jobs and idle VPs - make reidlequeue per VP - enable spinning for locks - fix race condition in alarm processing - fix race condition in mutex locking - make debugging output line buffered and add VP prefix to debug lines
|
1.17 |
| 24-Nov-2003 |
cl | Update mutex/rwlock/sem code to match recent change in cond code.
|
1.16 |
| 27-May-2003 |
christos | add missing notreached lint comment.
|
1.15 |
| 16-May-2003 |
nathanw | Separately report unlocking an unlocked mutex and unlocking a mutex owned by another thread.
|
1.14 |
| 23-Apr-2003 |
nathanw | Use pthread__error() instead of pthread__abort().
|
1.13 |
| 18-Apr-2003 |
nathanw | More agressive assertions. Change a number of detected conditions, which officially have undefined behavior, from returning an error code to raising an assertion failure. Also, don't bother to explicitly test for (illegal) null pointers and return an error; they'll bomb out soon enough.
|
1.12 |
| 16-Apr-2003 |
nathanw | pthread_mutex_trylock(): It's not an error to call trylock() on a mutex already locked by the calling thread, even for non-recursive mutexes.
|
1.11 |
| 16-Apr-2003 |
nathanw | When a thread sleeps on a mutex or cv, have it put itself on the front of the sleep queue rather than the back. This is more cache-friendly behavior and within the (lack of) constraints on wakeup ordering imposed on equal-priority threads.
|
1.10 |
| 08-Mar-2003 |
lukem | add __RCSID()
|
1.9 |
| 15-Feb-2003 |
nathanw | Remove unnecessary inclusion of <assert.h>.
|
1.8 |
| 31-Jan-2003 |
nathanw | Mutex tuneup.
* Use a double-checked locking technique to avoid taking the interlock in pthread_mutex_unlock().
* In pthread_mutex_lock() and pthread_mutex_trylock(), only store the stack pointer, not the thread ID, in ptm_owner. Do the translation to a thread ID in the slow-lock, errorcheck, and recursive mutex cases rather than in the common path.
* Juggle where pthread__self() is called, to move it out of the fast path.
Overall, this means that neither pthread_self() nor pthread_spin[un]lock() are used in the course of locking and unlocking an uncontested mutex. Speeds up the fast path by 40-50%, and eliminates about 98% of spinlocks used by a couple of large threaded applications.
(Still a GET_MUTEX_PRIVATE() in the fast path... perhaps the type should be in the main body of the mutex).
|
1.7 |
| 27-Jan-2003 |
nathanw | Add debug counters for mutex and condvar operations.
|
1.6 |
| 22-Jan-2003 |
scw | Need to include <string.h> for memcmp() prototype.
|
1.5 |
| 19-Jan-2003 |
thorpej | Fix typo.
|
1.4 |
| 19-Jan-2003 |
thorpej | Add mutexattr_init(), mutexattr_destroy(), and mutexattr_settype() (recursive mutexes are used by the X libraries).
|
1.3 |
| 18-Jan-2003 |
christos | de-lint
|
1.2 |
| 18-Jan-2003 |
thorpej | Merge the nathanw_sa branch.
|
1.1 |
| 05-Mar-2001 |
nathanw | branches: 1.1.2; file pthread_mutex.c was initially added on branch nathanw_sa.
|
1.1.2.20 |
| 14-Jan-2003 |
thorpej | Move a comment to a more logical location.
|
1.1.2.19 |
| 13-Jan-2003 |
thorpej | Implement recursive and errorcheck mutexes.
|
1.1.2.18 |
| 09-Jan-2003 |
thorpej | Remove trailing semicolon from __strong_alias().
|
1.1.2.17 |
| 08-Jan-2003 |
thorpej | Rewrite the way libpthread provides thread primitives to libc, using strong and weak aliases (the way cancelation points are handled).
Work around lame Unix static library semantics which could cause the wrong thread primitives or cancelation point functions to be included in a statically-linked program.
THIS IS AN ABI CHANGE. People running the nathanw_sa branch should ensure that their libc and libpthread are in sync after updating.
|
1.1.2.16 |
| 30-Dec-2002 |
thorpej | Add support for using RAS lock primitives on uniprocessors where RAS is available.
|
1.1.2.15 |
| 26-Oct-2002 |
nathanw | Whitespace in comments.
|
1.1.2.14 |
| 23-Oct-2002 |
nathanw | Revert previous. There's still a race condition whose avoidance requires checking the blocked queue with the interlock held.
|
1.1.2.13 |
| 22-Oct-2002 |
nathanw | Speed up pthread_mutex_unlock() similarly to what was done to pthread_mutex_lock(): heavily optimize for the case of a mutex with no waiters, and defer the waiter case to a separate function.
Uncontested mutexes now no longer use library spin locks.
|
1.1.2.12 |
| 04-Oct-2002 |
nathanw | Tweak pthread_mutex_lock(): Move the "slow" code to another function and only call pthread_self() inside that function.
Don't use pthread_self() to track ownership; just stash the stack pointer. Translation to thread IDs can be done post-mortem if necessary (Thanks to Greg Hudson for pointing this out).
|
1.1.2.11 |
| 26-Apr-2002 |
nathanw | Track the synchronization object being slept on.
|
1.1.2.10 |
| 11-Apr-2002 |
nathanw | Revert weak aliases.
|
1.1.2.9 |
| 25-Mar-2002 |
nathanw | Oops, that function is pthread_once(), not pthread_mutex_once().
|
1.1.2.8 |
| 25-Mar-2002 |
nathanw | Provide interfaces to libc.
|
1.1.2.7 |
| 28-Jan-2002 |
nathanw | Cancellation support. This includes implementing pthread_cancel() and pthread_testcancel(), making pthread_join() and pthread_cond_wait() cancellation points, introducing new states to distinguish waiting on a sleep queue from waiting in the kernel, and introducing a locking protocol around changing a thread's run state.
|
1.1.2.6 |
| 08-Aug-2001 |
nathanw | Implement pthread_once().
|
1.1.2.5 |
| 25-Jul-2001 |
nathanw | Stadardize and clean up use of ERRORCHECK. Implement pthread_{cond,mutex}attr_{init,destroy} and make the relevant functions check for their validity. (No non-default attribute values are supported, but these interfaces are required anyway).
|
1.1.2.4 |
| 24-Jul-2001 |
nathanw | Remove some unnecessary includes. Prefix some application-visible preprocessor symbols with an underscore.
Modify pthread_mutex_unlock() to only wake up one waiter.
|
1.1.2.3 |
| 13-Jul-2001 |
nathanw | Note copyright. Standardize RCS IDs.
|
1.1.2.2 |
| 13-Jul-2001 |
nathanw | Convert to new queue type.
Remove a level of indirection in the definition and use of pthread_mutex_t.
Add a note about Pthreads memory visibility rules.
Use an optimistic simple-lock approach for locking mutexes. Should be faster in the common case.
|
1.1.2.1 |
| 05-Mar-2001 |
nathanw | The beginnings of a scheduler activations-based pthread library.
|
1.18.6.2 |
| 25-Aug-2006 |
ghen | Pull up following revision(s) (requested by wrstuden in ticket #1474): lib/libpthread/pthread_mutex.c: revision 1.22 Close a window in which we can not notice a recently-slept-on-our mutex thread, thus leaving a thread sleeping on an unlocked mutex. Reviewed by myself and Christos. Problem reported by Arne H. Juul, arnej at pvv dot ntnu dot no, in PR 26208. This fix represents option 1 presented in the PR.
|
1.18.6.1 |
| 01-Nov-2005 |
jmc | branches: 1.18.6.1.2; Pullup revs 1.20-1.21 (requested by chs in ticket #926) In pthread_mutex_lock_slow(), pthread_rwlock_timedrdlock() and sem_wait(), call pthread__start() if it hasn't already been called. this avoids an internal assertion from the library if these routines are used before any threads are created and they need to sleep. PR#20256, PR#24241, PR#25722, PR#26096
Fix the interaction between sigtimedwait() and pthread_kill(), both waking up a sleeping thread and avoiding going to sleep if a signal is already pending. PR#30348
In pthread_kill() and pthread_suspend_np(), return without doing anything f the target thread is a zombie. In all the functions that didn't do so already, verify a pthread_t before dereferencing it (under #ifdef ERRORCHECK, since these checks are not mandated by the standard).
Starting the pthread library (ie. calling pthread__start()) before any threads are created turned out to be not such a good idea. there are stronger requirements on what has to work in a forked child while a process is still single-threaded. so take all that stuff back out and fix the problems with single-threaded programs that are linked with libpthread differently, by checking if the library has been started and doing completely different stuff if it hasn't been: - for pthread_rwlock_timedrdlock(), just fail with EDEADLK immediately. - for sem_wait(), the only thing that can unlock the semaphore is a signal handler, so use sigsuspend() to wait for a signal. - for pthread_mutex_lock_slow(), just go into an infinite loop waiting for signals.
If mlock() fails in pthread_create(), return EAGAIN instead of failing an assertion.
|
1.18.6.1.2.1 |
| 25-Aug-2006 |
ghen | Pull up following revision(s) (requested by wrstuden in ticket #1474): lib/libpthread/pthread_mutex.c: revision 1.22 Close a window in which we can not notice a recently-slept-on-our mutex thread, thus leaving a thread sleeping on an unlocked mutex. Reviewed by myself and Christos. Problem reported by Arne H. Juul, arnej at pvv dot ntnu dot no, in PR 26208. This fix represents option 1 presented in the PR.
|
1.21.2.1 |
| 25-Aug-2006 |
ghen | Pull up following revision(s) (requested by wrstuden in ticket #52): lib/libpthread/pthread_mutex.c: revision 1.22 Close a window in which we can not notice a recently-slept-on-our mutex thread, thus leaving a thread sleeping on an unlocked mutex. Reviewed by myself and Christos. Problem reported by Arne H. Juul, arnej at pvv dot ntnu dot no, in PR 26208. This fix represents option 1 presented in the PR.
|
1.22.4.2 |
| 04-Nov-2007 |
wrstuden | Check in changes to locking behavior.
pthread__sched() now takes a parameter indicating if the run queue is already locked. Useful in cases where we already hold pthread__runqueue_lock.
pthread__suspend() now requires callers explicitly lock pthread__runqueue_lock so we avoid issues with locking order regarding pt_statelock.
Adjsut our lock hierarchy. pthread__runqueue_lock is now above pt_statelock, triggering the above adjustments. Adjust a lot of routines as a result. Also move pt_siglock way up in the hierarchy, making pthread__kill() not violate locking. Add a few extra locks to the list.
Adjust a botch in how pthread_join() used pthread-spintrylock().
pthread_cancel() now correctly walks up the locks with thread->pt_sleeplock. We can't just lock it, as it points to a lock in the top locking rung. So try locking, and if it fails, unlock and re-lock. Add code to cope with the target thread not being in the expected state (which was on a blocked queue) after we get all the locks.
Add comments to describe what's going on in places that I got confused.
Now that pt_statelock is lower in the locking order than pthread__runqueue_lock, we can explicitly lock a thread's state before we take it off the run queue. Adjust sched_yield() accordingly and add some locking calls that were commented out before (as they'd have been locking violations).
pthread_next(): now that we can lock the state lock while holding the run queue lock, do so. Set a thread's state to PT_STATE_RUNNING before we pull it off the run queue. Since we always are going to switch to it, set pt_vpid and pt_lastlwp while setting the state. pthread_next callers now _don't_ set these values.
pthread__kill(): grab pthread__runqueue_lock before target->pt_statelock. If we want to target a thread that is on a blocked queue, do the pthread_spintrylock() dance. Unlock all three locks we're running around with, lock target->pt_sleeplock, then re-lock them all. After we lock, make sure that the thread's still on a blocked queue before proceeding. If it's not, either exit (if we wanted to wake out of sigtimedwait()) or start it all over. If the thread has gone live, it may have blocked our signal and it'd be quite weird to get a signal you'd disabled, just because the signaller had been running before you blocked it.
|
1.22.4.1 |
| 10-Sep-2007 |
wrstuden | Check in first step towards having pthread_kill() kill a thread running on another CPU.
This change adds initial support for deferred signal handling. Just before we go to sleep and while we hold &self->pt_statelock, check to see if we have any deferred signals (blocked signals) pending. These are signals that are not masked in our mask and which have been sent to us. We were running when they came in. Further, since they are being handled this way, there's a signal handler defined for them.
So unlock, run the signal handler(s), then carry on.
For condition variables, we consider this a spurious wakeup, so we just return 0, having not unlocked the mutex. We run the handler with the mutex held. This shouldn't matter, as you aren't supposed to play with mutexes in signal handlers. :-)
For nanosleep(), we just process signals, then go to sleep.
For all other cases, we are in a loop with some external predicate. So we process the signal then roll around the loop to see if it still applies.
In sched_yield(), spin until all deferred signals are gone. Since we hold self->pt_statelock and that lock has to be held before sending a deferred signal, no new deferred signals will come in until we're asleep.
While here, be more careful about locking while changing pt_state to PT_STATE_RUNNING. Grab pt_statelock while doing it, and also set next->pt_vpid to self->pt_vpid holding the same lock. Will make the test to determine how to deliver a signal work right (since a thread's vpid will soon matter in the general case). No longer set next->pt_vpid in pthread__next().
|
1.22.2.1 |
| 16-Sep-2008 |
bouyer | Sync with the following revisions (requested by skrll in ticket #1196): gnu/dist/gdb removed gnu/usr.bin/gdb53 removed distrib/cats/instkernel/Makefile 1.14.6.1 gnu/dist/gdb6/bfd/config.bfd 1.3.6.1 gnu/dist/gdb6/bfd/elfxx-sparc.c 1.1.1.2.6.1 gnu/dist/gdb6/bfd/elfxx-sparc.h 1.1.1.2.6.1 gnu/dist/gdb6/gdb/Makefile.in 1.2.2.1.2.2 gnu/dist/gdb6/gdb/alpha-tdep.c 1.1.1.2.6.1 gnu/dist/gdb6/gdb/alpha-tdep.h 1.1.1.2.6.1 gnu/dist/gdb6/gdb/alphabsd-nat.c 1.1.1.2.6.2 gnu/dist/gdb6/gdb/alphabsd-nat.h 1.1.2.1 gnu/dist/gdb6/gdb/alphabsd-tdep.c 1.1.1.2.6.1 gnu/dist/gdb6/gdb/alphabsd-tdep.h 1.1.1.2.6.1 gnu/dist/gdb6/gdb/alphanbsd-nat.c 1.1.2.1 gnu/dist/gdb6/gdb/alphanbsd-tdep.c 1.1.1.2.6.1 gnu/dist/gdb6/gdb/amd64-nat.c 1.1.1.2.6.1 gnu/dist/gdb6/gdb/amd64bsd-nat.c 1.1.1.2.6.1 gnu/dist/gdb6/gdb/amd64nbsd-nat.c 1.1.1.2.6.3 gnu/dist/gdb6/gdb/amd64nbsd-tdep.c 1.1.1.2.6.1 gnu/dist/gdb6/gdb/arm-tdep.h 1.1.1.2.6.1 gnu/dist/gdb6/gdb/armbsd-tdep.c 1.1.2.1 gnu/dist/gdb6/gdb/armnbsd-nat.c 1.1.1.2.6.2 gnu/dist/gdb6/gdb/armnbsd-tdep.c 1.1.1.2.6.1 gnu/dist/gdb6/gdb/configure 1.1.1.2.6.1 gnu/dist/gdb6/gdb/configure.ac 1.1.1.2.6.1 gnu/dist/gdb6/gdb/i386bsd-nat.c 1.1.1.2.6.1 gnu/dist/gdb6/gdb/i386nbsd-tdep.c 1.1.1.2.6.1 gnu/dist/gdb6/gdb/m68kbsd-nat.c 1.1.1.2.6.2 gnu/dist/gdb6/gdb/mipsnbsd-nat.c 1.1.1.2.6.2 gnu/dist/gdb6/gdb/nbsd-thread.c 1.1.2.3 gnu/dist/gdb6/gdb/ppcnbsd-nat.c 1.1.1.2.6.2 gnu/dist/gdb6/gdb/ppcnbsd-tdep.c 1.3.6.1 gnu/dist/gdb6/gdb/sh-tdep.c 1.1.1.2.6.1 gnu/dist/gdb6/gdb/shnbsd-nat.c 1.1.1.2.6.3 gnu/dist/gdb6/gdb/shnbsd-tdep.c 1.1.1.2.6.4 gnu/dist/gdb6/gdb/shnbsd-tdep.h 1.1.1.2.6.1 gnu/dist/gdb6/gdb/sparc-nat.c 1.1.1.2.6.1 gnu/dist/gdb6/gdb/sparc64nbsd-nat.c 1.1.1.2.6.2 gnu/dist/gdb6/gdb/sparcnbsd-nat.c 1.1.1.2.6.2 gnu/dist/gdb6/gdb/tramp-frame.h 1.1.1.2.6.1 gnu/dist/gdb6/gdb/vaxbsd-nat.c 1.1.1.2.6.2 gnu/dist/gdb6/gdb/config/alpha/nbsd.mh 1.1.1.2.6.1 gnu/dist/gdb6/gdb/config/arm/nbsd.mt 1.1.1.1.6.1 gnu/dist/gdb6/gdb/config/arm/nbsdelf.mh 1.1.1.1.6.1 gnu/dist/gdb6/gdb/config/i386/nbsd64.mh 1.1.1.1.6.1 gnu/dist/gdb6/gdb/config/m68k/nbsdelf.mh 1.1.1.1.6.1 gnu/dist/gdb6/gdb/config/mips/nbsd.mh 1.1.1.1.6.1 gnu/dist/gdb6/gdb/config/powerpc/nbsd.mh 1.1.1.2.6.1 gnu/dist/gdb6/gdb/config/sh/nbsd.mh 1.1.1.1.6.2 gnu/dist/gdb6/gdb/config/sh/tm-nbsd.h 1.1.1.1.6.1 gnu/dist/gdb6/gdb/config/sparc/nbsd64.mh 1.1.1.1.6.1 gnu/dist/gdb6/gdb/config/sparc/nbsdelf.mh 1.1.1.1.6.1 gnu/dist/gdb6/gdb/config/vax/nbsdelf.mh 1.1.1.1.6.1 gnu/dist/gdb6/opcodes/configure 1.1.1.2.6.1 gnu/dist/gdb6/opcodes/configure.in 1.1.1.2.6.1 gnu/usr.bin/Makefile 1.126.4.1 gnu/usr.bin/gdb6/arch/alpha/config.h 1.3.4.1 gnu/usr.bin/gdb6/arch/alpha/defs.mk 1.2.6.1 gnu/usr.bin/gdb6/arch/alpha/init.c 1.2.6.1 gnu/usr.bin/gdb6/arch/alpha/nm.h 1.2.6.1 gnu/usr.bin/gdb6/arch/arm/defs.mk 1.2.6.2 gnu/usr.bin/gdb6/arch/arm/init.c 1.1.6.1 gnu/usr.bin/gdb6/arch/armeb/config.h 1.1.6.2 gnu/usr.bin/gdb6/arch/armeb/defs.mk 1.1.6.3 gnu/usr.bin/gdb6/arch/armeb/init.c 1.1.6.2 gnu/usr.bin/gdb6/arch/armeb/tm.h 1.1.6.2 gnu/usr.bin/gdb6/arch/armeb/version.c 1.1.6.2 gnu/usr.bin/gdb6/arch/i386/defs.mk 1.4.4.1 gnu/usr.bin/gdb6/arch/i386/init.c 1.3.6.1 gnu/usr.bin/gdb6/arch/m68000/config.h 1.1.6.2 gnu/usr.bin/gdb6/arch/m68000/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/arch/m68000/init.c 1.1.6.2 gnu/usr.bin/gdb6/arch/m68000/tm.h 1.1.6.2 gnu/usr.bin/gdb6/arch/m68000/version.c 1.1.6.2 gnu/usr.bin/gdb6/arch/m68k/defs.mk 1.1.4.1 gnu/usr.bin/gdb6/arch/m68k/init.c 1.1.4.1 gnu/usr.bin/gdb6/arch/mipseb/config.h 1.3.4.1 gnu/usr.bin/gdb6/arch/mipseb/defs.mk 1.2.6.2 gnu/usr.bin/gdb6/arch/mipseb/init.c 1.2.6.2 gnu/usr.bin/gdb6/arch/mipsel/config.h 1.2.6.3 gnu/usr.bin/gdb6/arch/mipsel/defs.mk 1.2.6.3 gnu/usr.bin/gdb6/arch/mipsel/init.c 1.2.6.3 gnu/usr.bin/gdb6/arch/mipsel/tm.h 1.2.6.2 gnu/usr.bin/gdb6/arch/mipsel/version.c 1.2.6.2 gnu/usr.bin/gdb6/arch/powerpc/defs.mk 1.3.6.1 gnu/usr.bin/gdb6/arch/powerpc/init.c 1.3.6.1 gnu/usr.bin/gdb6/arch/sh3eb/config.h 1.2.2.2 gnu/usr.bin/gdb6/arch/sh3eb/defs.mk 1.2.8.3 gnu/usr.bin/gdb6/arch/sh3eb/init.c 1.1.8.3 gnu/usr.bin/gdb6/arch/sh3eb/nm.h 1.1.8.2 gnu/usr.bin/gdb6/arch/sh3eb/tm.h 1.1.8.2 gnu/usr.bin/gdb6/arch/sh3eb/version.c 1.1.8.2 gnu/usr.bin/gdb6/arch/sh3el/config.h 1.2.2.2 gnu/usr.bin/gdb6/arch/sh3el/defs.mk 1.2.8.3 gnu/usr.bin/gdb6/arch/sh3el/init.c 1.1.8.3 gnu/usr.bin/gdb6/arch/sh3el/nm.h 1.1.8.2 gnu/usr.bin/gdb6/arch/sh3el/tm.h 1.1.8.2 gnu/usr.bin/gdb6/arch/sh3el/version.c 1.1.8.2 gnu/usr.bin/gdb6/arch/sparc/defs.mk 1.2.6.1 gnu/usr.bin/gdb6/arch/sparc/init.c 1.1.6.1 gnu/usr.bin/gdb6/arch/sparc64/defs.mk 1.2.6.1 gnu/usr.bin/gdb6/arch/sparc64/init.c 1.1.6.1 gnu/usr.bin/gdb6/arch/vax/config.h 1.1.6.2 gnu/usr.bin/gdb6/arch/vax/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/arch/vax/init.c 1.1.6.2 gnu/usr.bin/gdb6/arch/vax/tm.h 1.1.6.2 gnu/usr.bin/gdb6/arch/vax/version.c 1.1.6.2 gnu/usr.bin/gdb6/arch/x86_64/defs.mk 1.2.6.1 gnu/usr.bin/gdb6/arch/x86_64/init.c 1.1.6.1 gnu/usr.bin/gdb6/bfd/arch/armeb/bfd.h 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/armeb/bfdver.h 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/armeb/config.h 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/armeb/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/m68000/bfd.h 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/m68000/bfdver.h 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/m68000/config.h 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/m68000/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/mipsel/bfd.h 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/mipsel/bfdver.h 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/mipsel/config.h 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/mipsel/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/sh3eb/bfd.h 1.1.8.3 gnu/usr.bin/gdb6/bfd/arch/sh3eb/bfdver.h 1.1.8.2 gnu/usr.bin/gdb6/bfd/arch/sh3eb/config.h 1.1.8.2 gnu/usr.bin/gdb6/bfd/arch/sh3eb/defs.mk 1.1.8.3 gnu/usr.bin/gdb6/bfd/arch/sh3el/bfd.h 1.1.8.3 gnu/usr.bin/gdb6/bfd/arch/sh3el/bfdver.h 1.1.8.2 gnu/usr.bin/gdb6/bfd/arch/sh3el/config.h 1.1.8.2 gnu/usr.bin/gdb6/bfd/arch/sh3el/defs.mk 1.1.8.3 gnu/usr.bin/gdb6/bfd/arch/vax/bfd.h 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/vax/bfdver.h 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/vax/config.h 1.1.6.2 gnu/usr.bin/gdb6/bfd/arch/vax/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/gdb/Makefile 1.5.2.1.2.2 gnu/usr.bin/gdb6/gdbtui/Makefile 1.2.6.1 gnu/usr.bin/gdb6/libiberty/arch/armeb/config.h 1.1.6.2 gnu/usr.bin/gdb6/libiberty/arch/armeb/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/libiberty/arch/m68000/config.h 1.1.6.2 gnu/usr.bin/gdb6/libiberty/arch/m68000/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/libiberty/arch/mipsel/config.h 1.1.6.2 gnu/usr.bin/gdb6/libiberty/arch/mipsel/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/libiberty/arch/sh3eb/config.h 1.1.8.2 gnu/usr.bin/gdb6/libiberty/arch/sh3eb/defs.mk 1.1.8.2 gnu/usr.bin/gdb6/libiberty/arch/sh3el/config.h 1.1.8.2 gnu/usr.bin/gdb6/libiberty/arch/sh3el/defs.mk 1.1.8.2 gnu/usr.bin/gdb6/libiberty/arch/vax/config.h 1.1.6.2 gnu/usr.bin/gdb6/libiberty/arch/vax/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/opcodes/arch/armeb/config.h 1.1.6.2 gnu/usr.bin/gdb6/opcodes/arch/armeb/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/opcodes/arch/m68000/config.h 1.1.6.2 gnu/usr.bin/gdb6/opcodes/arch/m68000/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/opcodes/arch/mipsel/config.h 1.1.6.2 gnu/usr.bin/gdb6/opcodes/arch/mipsel/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/opcodes/arch/sh3eb/config.h 1.1.8.2 gnu/usr.bin/gdb6/opcodes/arch/sh3eb/defs.mk 1.1.8.3 gnu/usr.bin/gdb6/opcodes/arch/sh3el/config.h 1.1.8.2 gnu/usr.bin/gdb6/opcodes/arch/sh3el/defs.mk 1.1.8.3 gnu/usr.bin/gdb6/opcodes/arch/vax/config.h 1.1.6.2 gnu/usr.bin/gdb6/opcodes/arch/vax/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/readline/arch/armeb/config.h 1.1.6.2 gnu/usr.bin/gdb6/readline/arch/armeb/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/readline/arch/m68000/config.h 1.1.6.2 gnu/usr.bin/gdb6/readline/arch/m68000/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/readline/arch/mipsel/config.h 1.1.6.2 gnu/usr.bin/gdb6/readline/arch/mipsel/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/readline/arch/sh3eb/config.h 1.1.8.2 gnu/usr.bin/gdb6/readline/arch/sh3eb/defs.mk 1.1.8.2 gnu/usr.bin/gdb6/readline/arch/sh3el/config.h 1.1.8.2 gnu/usr.bin/gdb6/readline/arch/sh3el/defs.mk 1.1.8.2 gnu/usr.bin/gdb6/readline/arch/vax/config.h 1.1.6.2 gnu/usr.bin/gdb6/readline/arch/vax/defs.mk 1.1.6.2 gnu/usr.bin/gdb6/sim/arch/mipseb/cconfig.h 1.1.2.1 gnu/usr.bin/gdb6/sim/arch/mipseb/config.h 1.1.2.1 gnu/usr.bin/gdb6/sim/arch/mipseb/defs.mk 1.1.2.1 gnu/usr.bin/gdb6/sim/arch/mipsel/cconfig.h 1.1.2.1 gnu/usr.bin/gdb6/sim/arch/mipsel/config.h 1.1.2.1 gnu/usr.bin/gdb6/sim/arch/mipsel/defs.mk 1.1.2.1 lib/libkvm/kvm_sparc64.c 1.10.18.2 lib/libpthread/pthread.c 1.48.6.4 lib/libpthread/pthread_barrier.c 1.6.18.1 lib/libpthread/pthread_cond.c 1.18.12.2 lib/libpthread/pthread_debug.h 1.8.18.1 lib/libpthread/pthread_int.h 1.34.4.5 lib/libpthread/pthread_lock.c 1.14.6.1 lib/libpthread/pthread_mutex.c 1.22.4.2 lib/libpthread/pthread_run.c 1.18.12.4 lib/libpthread/pthread_rwlock.c 1.13.6.2 lib/libpthread/pthread_sa.c 1.37.6.5 lib/libpthread/pthread_sig.c 1.47.4.8 lib/libpthread/pthread_sleep.c 1.7.6.2 lib/libpthread/sem.c 1.9.6.2 lib/libpthread/arch/sh3/pthread_md.h 1.3.6.1 regress/lib/libpthread/resolv/Makefile 1.1.12.1 regress/lib/libpthread/sigrunning/Makefile 1.1.2.1 regress/lib/libpthread/sigrunning/sigrunning.c 1.1.2.1 share/mk/bsd.own.mk 1.489.4.3 sys/arch/amd64/amd64/locore.S 1.18.14.1 sys/arch/amd64/amd64/machdep.c 1.44.2.3.2.1 sys/arch/amd64/conf/kern.ldscript 1.1.70.1 sys/arch/cats/conf/Makefile.cats.inc 1.17.30.1 sys/arch/shark/conf/Makefile.shark.inc 1.6.30.1 sys/arch/sparc64/conf/kern.ldscript 1.7.26.2 sys/arch/sparc64/conf/kern32.ldscript 1.6.26.2 sys/arch/sparc64/include/kcore.h 1.4.92.2 sys/arch/sparc64/sparc64/locore.s 1.232.4.4 sys/arch/sparc64/sparc64/machdep.c 1.193.4.3 sys/arch/sparc64/sparc64/pmap.c 1.184.2.1.2.4 sys/conf/newvers.sh 1.42.26.2 sys/kern/kern_sa.c 1.87.4.11 sys/kern/kern_synch.c 1.173.4.2 sys/sys/savar.h 1.20.10.2 tools/gdb/Makefile 1.9.4.1 tools/gdb/mknative-gdb 1.1.6.1
pullup the wrstuden-fixsa CVS branch to netbsd-4: toolchain/35540 - GDB 6 support for pthreads. port-sparc64/37534 - ktrace firefox gives kernel trap 30: data access expection GDB changes: - delete gdb53 - enable gdb6 on all architectures - add support for amd64 crash dumps - add support for sparc64 crash dumps - add support for /proc pid to executable filename for all archs - enable thread support for all architectures - add a note section to kernels to all platforms - support detection/unwinding of signals for most architectures. - Fix PTHREAD_UCONTEXT_TO_REG / PTHREAD_REG_TO_UCONTEXT on sh3. - Apply fix from binutils-current so that sparc gdb can be cross built on a 64bit host. SA/pthread changes: Pre-allocate memory needed for event delivery. Eliminates dropped interrupts under load. Deliver intra-process signals to running threads Eliminate some deadlock scenarios Fix intra-process signal delivery when delivering to a thread waiting for signals. Makes afs work again!
|
1.28.2.4 |
| 10-Sep-2007 |
skrll | Sync with HEAD.
|
1.28.2.3 |
| 03-Sep-2007 |
skrll | Sync with HEAD.
|
1.28.2.2 |
| 15-Aug-2007 |
skrll | Sync with HEAD.
|
1.28.2.1 |
| 18-Jul-2007 |
skrll | Initial work on provided correctly aligned __cpu_simple_lock_t for hppa and first attempt at adapting i386 to the changes.
More to come.
|
1.29.2.2 |
| 04-Aug-2007 |
ad | Some significant performance improvements, and a fix for a race with pthread detach/join.
- Make mutex acquire spin for a short time, as done with spinlocks. - Make the number of spins controllable with the env var PTHREAD_NSPINS. - Reduce the amount of time that libpthread internal spinlocks are held. - Rely more on the barrier effects of park/unpark to avoid taking spinlocks. - Simplify the locking around pthreads and the global queues. - Align per-thread sync data on a 128 byte boundary. - Offset thread stacks by a small amount to try and reduce cache thrash.
|
1.29.2.1 |
| 04-Aug-2007 |
ad | file pthread_mutex.c was added on branch matt-mips64 on 2007-08-04 13:37:50 +0000
|
1.31.2.3 |
| 23-Mar-2008 |
matt | sync with HEAD
|
1.31.2.2 |
| 09-Jan-2008 |
matt | sync with HEAD
|
1.31.2.1 |
| 06-Nov-2007 |
matt | sync with HEAD
|
1.45.2.1 |
| 24-Mar-2008 |
keiichi | sync with head.
|
1.47.2.2 |
| 04-Jun-2008 |
yamt | sync with head
|
1.47.2.1 |
| 18-May-2008 |
yamt | sync with head.
|
1.48.2.2 |
| 18-Sep-2008 |
wrstuden | Sync with wrstuden-revivesa-base-2.
|
1.48.2.1 |
| 23-Jun-2008 |
wrstuden | Sync w/ -current. 34 merge conflicts to follow.
|
1.51.22.2 |
| 20-Feb-2014 |
sborrill | Pull up the following revisions(s) (requested by prlw1 in ticket #1029): lib/libpthread/pthread_cond.c: revision 1.62 lib/libpthread/pthread_mutex.c: revision 1.57,1.59
Partial fix for thread deadlock commonly observed with named. Also address PR/44756.
|
1.51.22.1 |
| 29-Apr-2013 |
riz | Pull up following revision(s) (requested by manu in ticket #869): lib/libpthread/pthread_rwlock.c: revision 1.33 lib/libc/include/reentrant.h: revision 1.16 lib/libpthread/pthread_cond.c: revision 1.59 lib/libpthread/pthread_misc.c: revision 1.15 lib/libc/thread-stub/thread-stub.c: revision 1.23 lib/libpthread/pthread_cancelstub.c: revision 1.38 lib/libpthread/pthread_specific.c: revision 1.26 lib/libpthread/pthread_mutex.c: revision 1.56 lib/libpthread/pthread_tsd.c: revision 1.11 lib/libpthread/Makefile: revision 1.80 lib/libpthread/pthread.c: revision 1.143 lib/libpthread/pthread_int.h: revision 1.89 - Allow libpthread to be dlopened again, by providing libc stubs to libpthread. - Fail if the dlopened libpthread does pthread_create(). From manu@ - Discussed at length in the mailing lists; approved by core@ - This was chosen as the least intrusive patch that will provide the necessary functionality. XXX: pullup to 6
|
1.51.6.2 |
| 02-Aug-2008 |
matt | Change pthread_mutex_t to use the amount of space as and be congruent to the version used in the SA version of pthreads. This preserves binary compatibility between both versions of the library.
|
1.51.6.1 |
| 02-Aug-2008 |
matt | file pthread_mutex.c was added on branch christos-time_t on 2008-08-02 19:46:31 +0000
|
1.51.4.1 |
| 20-Feb-2014 |
sborrill | Pull up the following revisions(s) (requested by prlw1 in ticket #1898): lib/libpthread/pthread_cond.c: revision 1.62 lib/libpthread/pthread_mutex.c: revision 1.57,1.59
Partial fix for thread deadlock commonly observed with named. Also address PR/44756.
|
1.51.2.3 |
| 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.51.2.2 |
| 30-Oct-2012 |
yamt | sync with head
|
1.51.2.1 |
| 17-Apr-2012 |
yamt | sync with head
|
1.54.2.2 |
| 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.54.2.1 |
| 23-Jun-2013 |
tls | resync from head
|
1.60.2.2 |
| 04-Nov-2016 |
pgoyette | Sync with HEAD
|
1.60.2.1 |
| 26-Jul-2016 |
pgoyette | Sync with HEAD
|
1.64.4.2 |
| 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.64.4.1 |
| 10-Jun-2019 |
christos | Sync with HEAD
|
1.65.2.1 |
| 26-Jan-2020 |
martin | Pull up following revision(s) (requested by ad in ticket #647):
lib/libpthread/pthread_rwlock.c: revision 1.37 (patch) lib/libpthread/pthread_misc.c: revision 1.16 lib/libpthread/pthread.c: revision 1.154 lib/libpthread/pthread_int.h: revision 1.98 lib/libpthread/pthread_cond.c: revision 1.66 lib/libpthread/pthread_mutex.c: revision 1.66
Rip out some very ambitious optimisations around pthread_mutex that are don't buy much. This stuff is hard enough to get right in the kernel let alone userspace, and I don't trust that it's right.
|