1 #include "pthread_impl.h"
3 int __pthread_rwlock_timedwrlock(pthread_rwlock_t
*restrict rw
, const struct timespec
*restrict at
)
7 r
= pthread_rwlock_trywrlock(rw
);
8 if (r
!= EBUSY
) return r
;
11 while (spins
-- && rw
->_rw_lock
&& !rw
->_rw_waiters
) a_spin();
13 while ((r
=__pthread_rwlock_trywrlock(rw
))==EBUSY
) {
14 if (!(r
=rw
->_rw_lock
)) continue;
16 a_inc(&rw
->_rw_waiters
);
17 a_cas(&rw
->_rw_lock
, r
, t
);
18 r
= __timedwait(&rw
->_rw_lock
, t
, CLOCK_REALTIME
, at
, rw
->_rw_shared
^128);
19 a_dec(&rw
->_rw_waiters
);
20 if (r
&& r
!= EINTR
) return r
;
25 weak_alias(__pthread_rwlock_timedwrlock
, pthread_rwlock_timedwrlock
);