123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #include "pthreadP.h"
- #include <bits/kernel-features.h>
- #include <string.h>
- static const struct pthread_rwlockattr default_attr =
- {
- .lockkind = PTHREAD_RWLOCK_DEFAULT_NP,
- .pshared = PTHREAD_PROCESS_PRIVATE
- };
- int
- __pthread_rwlock_init (
- pthread_rwlock_t *rwlock,
- const pthread_rwlockattr_t *attr)
- {
- const struct pthread_rwlockattr *iattr;
- iattr = ((const struct pthread_rwlockattr *) attr) ?: &default_attr;
- memset (rwlock, '\0', sizeof (*rwlock));
- rwlock->__data.__flags
- = iattr->lockkind == PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP;
-
- #ifdef __ASSUME_PRIVATE_FUTEX
- rwlock->__data.__shared = (iattr->pshared == PTHREAD_PROCESS_PRIVATE
- ? 0 : FUTEX_PRIVATE_FLAG);
- #else
- rwlock->__data.__shared = (iattr->pshared == PTHREAD_PROCESS_PRIVATE
- ? 0
- : THREAD_GETMEM (THREAD_SELF,
- header.private_futex));
- #endif
- return 0;
- }
- strong_alias (__pthread_rwlock_init, pthread_rwlock_init)
|