X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fthread%2Fpthread_mutex_trylock.c;h=6fc604fe1e731617e2510e8ff69989bb22dce559;hb=e914f8b7ec79f622fa3b017af434642f61d45ce8;hp=25b9e869ae02f6621112c3a086d4245ccc70559b;hpb=d4f9e0b3642a81d07c95302cd9aa0dcaf7de1a05;p=musl diff --git a/src/thread/pthread_mutex_trylock.c b/src/thread/pthread_mutex_trylock.c index 25b9e869..6fc604fe 100644 --- a/src/thread/pthread_mutex_trylock.c +++ b/src/thread/pthread_mutex_trylock.c @@ -5,19 +5,17 @@ int pthread_mutex_trylock(pthread_mutex_t *m) int tid; if (m->_m_type == PTHREAD_MUTEX_NORMAL) - return -a_xchg(&m->_m_lock, 1) & EBUSY; + return (m->_m_lock || a_swap(&m->_m_lock, 1)) ? EBUSY : 0; 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;