fix wrong sigaction syscall ABI on mips*, or1k, microblaze, riscv64
[musl] / src / thread / pthread_rwlock_unlock.c
index a6d2085..9ae27ad 100644 (file)
@@ -1,8 +1,8 @@
 #include "pthread_impl.h"
 
-int pthread_rwlock_unlock(pthread_rwlock_t *rw)
+int __pthread_rwlock_unlock(pthread_rwlock_t *rw)
 {
-       int val, cnt, waiters, new;
+       int val, cnt, waiters, new, priv = rw->_rw_shared^128;
 
        do {
                val = rw->_rw_lock;
@@ -12,7 +12,9 @@ int pthread_rwlock_unlock(pthread_rwlock_t *rw)
        } while (a_cas(&rw->_rw_lock, val, new) != val);
 
        if (!new && (waiters || val<0))
-               __wake(&rw->_rw_lock, cnt, 0);
+               __wake(&rw->_rw_lock, cnt, priv);
 
        return 0;
 }
+
+weak_alias(__pthread_rwlock_unlock, pthread_rwlock_unlock);