#include "threads_impl.h"

int __pthread_mutex_trylock_owner(pthread_mutex_t* m) {
    int old;
    int type = m->_m_type & PTHREAD_MUTEX_MASK;
    pid_t tid = __thread_get_tid();
    pid_t own;

    old = atomic_load(&m->_m_lock);
    own = pthread_mutex_state_to_tid(old);
    if (own == tid && (type & PTHREAD_MUTEX_MASK) == PTHREAD_MUTEX_RECURSIVE) {
        if ((unsigned)m->_m_count >= INT_MAX)
            return EAGAIN;
        m->_m_count++;
        return 0;
    }

    int owned_state = pthread_mutex_tid_to_uncontested_state(tid);
    if (old || a_cas_shim(&m->_m_lock, old, owned_state) != old) {
        return EBUSY;
    }

    return 0;
}

int pthread_mutex_trylock(pthread_mutex_t* m) {
    if ((m->_m_type & PTHREAD_MUTEX_MASK) == PTHREAD_MUTEX_NORMAL) {
        int owned_state = pthread_mutex_tid_to_uncontested_state(__thread_get_tid());
        return (a_cas_shim(&m->_m_lock, 0, owned_state) == 0) ? 0 : EBUSY;
    }
    return __pthread_mutex_trylock_owner(m);
}
