8d1fb07c0c9ccd81aa579ba65bed64fbaaed308f
[musl] / src / thread / mtx_trylock.c
1 #include "pthread_impl.h"
2 #include <threads.h>
3
4 int __pthread_mutex_trylock(pthread_mutex_t *);
5
6 int mtx_trylock(mtx_t *m)
7 {
8         if (m->_m_type == PTHREAD_MUTEX_NORMAL)
9                 return (a_cas(&m->_m_lock, 0, EBUSY) & EBUSY) ? thrd_busy : thrd_success;
10
11         int ret = __pthread_mutex_trylock((pthread_mutex_t *)m);
12         switch (ret) {
13         default:    return thrd_error;
14         case 0:     return thrd_success;
15         case EBUSY: return thrd_busy;
16         }
17 }