simplify logic, slightly optimize contended case for non-default mutex types
authorRich Felker <dalias@aerifal.cx>
Wed, 16 Mar 2011 20:49:42 +0000 (16:49 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 16 Mar 2011 20:49:42 +0000 (16:49 -0400)
src/thread/pthread_mutex_trylock.c

index 25b9e869ae02f6621112c3a086d4245ccc70559b..af421472dd52adb3659d2e402133c33138ff83ec 100644 (file)
@@ -9,15 +9,13 @@ int pthread_mutex_trylock(pthread_mutex_t *m)
 
        tid = pthread_self()->tid;
 
-       if (m->_m_owner == tid) {
-               if (m->_m_type != PTHREAD_MUTEX_RECURSIVE)
-                       return EBUSY;
+       if (m->_m_owner == tid && m->_m_type == PTHREAD_MUTEX_RECURSIVE) {
                if ((unsigned)m->_m_count >= INT_MAX) return EAGAIN;
                m->_m_count++;
                return 0;
        }
 
-       if (a_xchg(&m->_m_lock, 1)) return EBUSY;
+       if (m->_m_owner || a_xchg(&m->_m_lock, 1)) return EBUSY;
        m->_m_owner = tid;
        m->_m_count = 1;
        return 0;