projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
optimize contended normal mutex case; add int compare-and-swap atomic
[musl]
/
src
/
thread
/
pthread_mutex_lock.c
diff --git
a/src/thread/pthread_mutex_lock.c
b/src/thread/pthread_mutex_lock.c
index
15ede3f
..
8255614
100644
(file)
--- a/
src/thread/pthread_mutex_lock.c
+++ b/
src/thread/pthread_mutex_lock.c
@@
-3,7
+3,11
@@
int pthread_mutex_lock(pthread_mutex_t *m)
{
int r;
int pthread_mutex_lock(pthread_mutex_t *m)
{
int r;
- while ((r=pthread_mutex_trylock(m)) == EBUSY)
+ while ((r=pthread_mutex_trylock(m)) == EBUSY) {
+ if (m->_m_type == PTHREAD_MUTEX_ERRORCHECK
+ && m->_m_owner == pthread_self()->tid)
+ return EDEADLK;
__wait(&m->_m_lock, &m->_m_waiters, 1, 0);
__wait(&m->_m_lock, &m->_m_waiters, 1, 0);
+ }
return r;
}
return r;
}