summaryrefslogtreecommitdiff
path: root/src/thread/pthread_mutex_unlock.c
AgeCommit message (Collapse)AuthorFilesLines
2011-10-03simplify robust mutex unlock code pathRich Felker1-4/+4
right now it's questionable whether this change is an improvement or not, but if we later want to support priority inheritance mutexes, it will be important to have the code paths unified like this to avoid major code duplication.
2011-10-03fix crash if pthread_mutex_unlock is called without ever lockingRich Felker1-1/+1
this is valid for error-checking mutexes; otherwise it invokes UB and would be justified in crashing.
2011-10-03use count=0 instead of 1 for recursive mutex with only one lock referenceRich Felker1-2/+2
this simplifies the code paths slightly, but perhaps what's nicer is that it makes recursive mutexes fully reentrant, i.e. locking and unlocking from a signal handler works even if the interrupted code was in the middle of locking or unlocking.
2011-08-02avoid accessing mutex memory after atomic unlockRich Felker1-7/+8
this change is needed to fix a race condition and ensure that it's possible to unlock and destroy or unmap the mutex as soon as pthread_mutex_lock succeeds. POSIX explicitly gives such an example in the rationale and requires an implementation to allow such usage.
2011-03-30avoid crash on stupid but allowable usage of pthread_mutex_unlockRich Felker1-1/+3
unlocking an unlocked mutex is not UB for robust or error-checking mutexes, so we must avoid calling __pthread_self (which might crash due to lack of thread-register initialization) until after checking that the mutex is locked.
2011-03-30streamline mutex unlock to remove a useless branch, use a_store to unlockRich Felker1-2/+6
this roughly halves the cost of pthread_mutex_unlock, at least for non-robust, normal-type mutexes. the a_store change is in preparation for future support of archs which require a memory barrier or special atomic store operation, and also should prevent the possibility of the compiler misordering writes.
2011-03-17implement robust mutexesRich Felker1-2/+11
some of this code should be cleaned up, e.g. using macros for some of the bit flags, masks, etc. nonetheless, the code is believed to be working and correct at this point.
2011-03-17avoid function call to pthread_self in mutex unlockRich Felker1-1/+1
if the mutex was previously locked, we can assume pthread_self was already called at the time of locking, and thus that the thread pointer is initialized.
2011-03-17unify lock and owner fields of mutex structureRich Felker1-2/+1
this change is necessary to free up one slot in the mutex structure so that we can use doubly-linked lists in the implementation of robust mutexes.
2011-03-08fix and optimize non-default-type mutex behaviorRich Felker1-8/+5
problem 1: mutex type from the attribute was being ignored by pthread_mutex_init, so recursive/errorchecking mutexes were never being used at all. problem 2: ownership of recursive mutexes was not being enforced at unlock time.
2011-02-17reorganize pthread data structures and move the definitions to alltypes.hRich Felker1-8/+8
this allows sys/types.h to provide the pthread types, as required by POSIX. this design also facilitates forcing ABI-compatible sizes in the arch-specific alltypes.h, while eliminating the need for developers changing the internals of the pthread types to poke around with arch-specific headers they may not be able to test.
2011-02-12initial check-in, version 0.5.0v0.5.0Rich Felker1-0/+19