1 #include "pthread_impl.h"
3 int __pthread_rwlock_unlock(pthread_rwlock_t
*rw
)
5 int val
, cnt
, waiters
, new, priv
= rw
->_rw_shared
^128;
9 cnt
= val
& 0x7fffffff;
10 waiters
= rw
->_rw_waiters
;
11 new = (cnt
== 0x7fffffff || cnt
== 1) ? 0 : val
-1;
12 } while (a_cas(&rw
->_rw_lock
, val
, new) != val
);
14 if (!new && (waiters
|| val
<0))
15 __wake(&rw
->_rw_lock
, cnt
, priv
);
20 weak_alias(__pthread_rwlock_unlock
, pthread_rwlock_unlock
);