- int tid;
- int own;
- pthread_t self;
-
- if (m->_m_type == PTHREAD_MUTEX_NORMAL)
- return -a_swap(&m->_m_lock, 1) & EBUSY;
-
- self = pthread_self();
- tid = self->tid | 0x80000000;
-
- if (m->_m_type >= 4) {
- if (!self->robust_list.off)
- syscall(SYS_set_robust_list,
- &self->robust_list, 3*sizeof(long));
- self->robust_list.off = (char*)&m->_m_lock-(char *)&m->_m_next;
- self->robust_list.pending = &m->_m_next;
- }
-
- if (m->_m_lock == tid && (m->_m_type&3) == PTHREAD_MUTEX_RECURSIVE) {
+ int old, own;
+ int type = m->_m_type & 15;
+ pthread_t self = __pthread_self();
+ int tid = self->tid;
+
+ old = m->_m_lock;
+ own = old & 0x7fffffff;
+ if (own == tid && (type&3) == PTHREAD_MUTEX_RECURSIVE) {