Blame src/regression/pthread_rwlock-ebusy.c
|
Szabolcs Nagy |
b3af10 |
// commit: e5dd18319bbd47c89aac5e1571771958a43e067d 2011-03-08
|
|
Szabolcs Nagy |
b3af10 |
// pthread_rwlock_try* should fail with EBUSY
|
|
Szabolcs Nagy |
b3af10 |
#include <pthread.h>
|
|
Szabolcs Nagy |
b3af10 |
#include <errno.h>
|
|
Szabolcs Nagy |
b3af10 |
#include <string.h>
|
|
Szabolcs Nagy |
b3af10 |
#include "test.h"
|
|
Szabolcs Nagy |
b3af10 |
|
|
Szabolcs Nagy |
b3af10 |
#define T(f) if ((r=(f))) t_error(#f " failed: %s\n", strerror(r))
|
|
Szabolcs Nagy |
b3af10 |
|
|
Szabolcs Nagy |
b3af10 |
static void *tryrdlock(void *arg)
|
|
Szabolcs Nagy |
b3af10 |
{
|
|
Szabolcs Nagy |
b3af10 |
int r = pthread_rwlock_tryrdlock(arg);
|
|
Szabolcs Nagy |
b3af10 |
if (r != EBUSY)
|
|
Szabolcs Nagy |
90e311 |
t_error("tryrdlock for wrlocked lock returned %s, want EBUSY\n", strerror(r));
|
|
Szabolcs Nagy |
b3af10 |
return 0;
|
|
Szabolcs Nagy |
b3af10 |
}
|
|
Szabolcs Nagy |
b3af10 |
|
|
Szabolcs Nagy |
b3af10 |
static void *trywrlock(void *arg)
|
|
Szabolcs Nagy |
b3af10 |
{
|
|
Szabolcs Nagy |
b3af10 |
int r = pthread_rwlock_trywrlock(arg);
|
|
Szabolcs Nagy |
b3af10 |
if (r != EBUSY)
|
|
Szabolcs Nagy |
90e311 |
t_error("trywrlock for rdlocked lock returned %s, want EBUSY\n", strerror(r));
|
|
Szabolcs Nagy |
b3af10 |
return 0;
|
|
Szabolcs Nagy |
b3af10 |
}
|
|
Szabolcs Nagy |
b3af10 |
|
|
Szabolcs Nagy |
b3af10 |
int main(void)
|
|
Szabolcs Nagy |
b3af10 |
{
|
|
Szabolcs Nagy |
b3af10 |
pthread_t t;
|
|
Szabolcs Nagy |
b3af10 |
pthread_rwlock_t rw = PTHREAD_RWLOCK_INITIALIZER;
|
|
Szabolcs Nagy |
b3af10 |
void *p;
|
|
Szabolcs Nagy |
b3af10 |
int r;
|
|
Szabolcs Nagy |
b3af10 |
|
|
Szabolcs Nagy |
b3af10 |
T(pthread_rwlock_rdlock(&rw));
|
|
Szabolcs Nagy |
b3af10 |
T(pthread_create(&t, 0, trywrlock, &rw));
|
|
Szabolcs Nagy |
b3af10 |
T(pthread_join(t, &p);;
|
|
Szabolcs Nagy |
b3af10 |
T(pthread_rwlock_unlock(&rw));
|
|
Szabolcs Nagy |
b3af10 |
|
|
Szabolcs Nagy |
b3af10 |
T(pthread_rwlock_wrlock(&rw));
|
|
Szabolcs Nagy |
b3af10 |
T(pthread_create(&t, 0, tryrdlock, &rw));
|
|
Szabolcs Nagy |
b3af10 |
T(pthread_join(t, &p);;
|
|
Szabolcs Nagy |
b3af10 |
T(pthread_rwlock_unlock(&rw));
|
|
Szabolcs Nagy |
b3af10 |
|
|
Szabolcs Nagy |
b3af10 |
return t_status;
|
|
Szabolcs Nagy |
b3af10 |
}
|