overhaul rwlocks to address several issues
[musl] / src / thread / pthread_rwlock_trywrlock.c
index 202e256..bb3d3a9 100644 (file)
@@ -2,12 +2,6 @@
 
 int pthread_rwlock_trywrlock(pthread_rwlock_t *rw)
 {
-       if (a_xchg(&rw->_rw_wrlock, 1))
-               return EBUSY;
-       if (rw->_rw_readers) {
-               a_store(&rw->_rw_wrlock, 0);
-               return EBUSY;
-       }
-       rw->_rw_owner = pthread_self()->tid;
+       if (a_cas(&rw->_rw_lock, 0, 0x7fffffff)) return EBUSY;
        return 0;
 }