mirror of git://git.musl-libc.org/musl
simplify robust mutex unlock code path
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.
This commit is contained in:
parent
b8688ff875
commit
b6f9974ad8
|
@ -5,6 +5,7 @@ int pthread_mutex_unlock(pthread_mutex_t *m)
|
|||
pthread_t self;
|
||||
int waiters = m->_m_waiters;
|
||||
int cont;
|
||||
int robust = 0;
|
||||
|
||||
if (m->_m_type != PTHREAD_MUTEX_NORMAL) {
|
||||
if (!m->_m_lock)
|
||||
|
@ -15,16 +16,15 @@ int pthread_mutex_unlock(pthread_mutex_t *m)
|
|||
if ((m->_m_type&3) == PTHREAD_MUTEX_RECURSIVE && m->_m_count)
|
||||
return m->_m_count--, 0;
|
||||
if (m->_m_type >= 4) {
|
||||
robust = 1;
|
||||
self->robust_list.pending = &m->_m_next;
|
||||
*(void **)m->_m_prev = m->_m_next;
|
||||
if (m->_m_next) ((void **)m->_m_next)[-1] = m->_m_prev;
|
||||
cont = a_swap(&m->_m_lock, 0);
|
||||
self->robust_list.pending = 0;
|
||||
goto wake;
|
||||
}
|
||||
}
|
||||
cont = a_swap(&m->_m_lock, 0);
|
||||
wake:
|
||||
if (robust)
|
||||
self->robust_list.pending = 0;
|
||||
if (waiters || cont<0)
|
||||
__wake(&m->_m_lock, 1, 0);
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue