diff options
author | Rich Felker <dalias@aerifal.cx> | 2011-10-03 00:19:05 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2011-10-03 00:19:05 -0400 |
commit | b6f9974ad843b6b106db082fc44e710c0eb06e3b (patch) | |
tree | 28fec79a2715f8246dad423c5fdeff0a855ea34a /src/thread | |
parent | b8688ff87574fad6b3056443a5385010952fb243 (diff) | |
download | musl-b6f9974ad843b6b106db082fc44e710c0eb06e3b.tar.gz musl-b6f9974ad843b6b106db082fc44e710c0eb06e3b.tar.bz2 musl-b6f9974ad843b6b106db082fc44e710c0eb06e3b.tar.xz musl-b6f9974ad843b6b106db082fc44e710c0eb06e3b.zip |
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.
Diffstat (limited to 'src/thread')
-rw-r--r-- | src/thread/pthread_mutex_unlock.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/thread/pthread_mutex_unlock.c b/src/thread/pthread_mutex_unlock.c index 6950872b..fdf9fc10 100644 --- a/src/thread/pthread_mutex_unlock.c +++ b/src/thread/pthread_mutex_unlock.c @@ -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; |