/* Test whether a basic pthread_rwlock_clockrdlock invocation works. */ #include #include #include "../basic.h" int main(void) { pthread_rwlock_t rwlock; if ( (errno = pthread_rwlock_init(&rwlock, NULL)) ) err(1, "pthread_rwlock_init"); struct timespec long_timeout; clock_gettime(CLOCK_MONOTONIC, &long_timeout); long_timeout.tv_sec += 60; if ( (errno = pthread_rwlock_clockrdlock(&rwlock, CLOCK_MONOTONIC, &long_timeout)) ) err(1, "pthread_rwlock_timedlock"); if ( (errno = pthread_rwlock_unlock(&rwlock)) ) err(1, "pthread_rwlock_unlock"); if ( (errno = pthread_rwlock_wrlock(&rwlock)) ) err(1, "pthread_rwlock_wrlock"); struct timespec short_timeout; clock_gettime(CLOCK_MONOTONIC, &short_timeout); if ( (errno = pthread_rwlock_clockrdlock(&rwlock, CLOCK_MONOTONIC, &short_timeout)) ) { if ( errno != ETIMEDOUT && errno != EDEADLK ) err(1, "pthread_rwlock_clockrdlock"); } else errx(1, "pthread_rwlock_clockrdlock did not time out"); return 0; }