|
Szabolcs Nagy |
0dee0d |
// commit: 9d5251f72b627974bcf438501e07ad42c24d94be 2011-03-08
|
|
Szabolcs Nagy |
0dee0d |
// disallow cpu time clocks in condattr
|
|
Szabolcs Nagy |
0dee0d |
#include <pthread.h>
|
|
Szabolcs Nagy |
0dee0d |
#include <time.h>
|
|
Szabolcs Nagy |
0dee0d |
#include <string.h>
|
|
Szabolcs Nagy |
0dee0d |
#include <errno.h>
|
|
Szabolcs Nagy |
0dee0d |
#include "test.h"
|
|
Szabolcs Nagy |
0dee0d |
|
|
Szabolcs Nagy |
0dee0d |
#define T(r,f) if ((r=(f))) t_error(#f " failed: %s\n", strerror(r))
|
|
Szabolcs Nagy |
0dee0d |
|
|
Szabolcs Nagy |
0dee0d |
int main(void)
|
|
Szabolcs Nagy |
0dee0d |
{
|
|
Szabolcs Nagy |
0dee0d |
pthread_cond_t c;
|
|
Szabolcs Nagy |
0dee0d |
pthread_condattr_t a;
|
|
Szabolcs Nagy |
0dee0d |
pthread_mutex_t m;
|
|
Szabolcs Nagy |
0dee0d |
clockid_t clk;
|
|
Szabolcs Nagy |
0dee0d |
struct timespec ts;
|
|
Szabolcs Nagy |
0dee0d |
void *p;
|
|
Szabolcs Nagy |
0dee0d |
int r;
|
|
Szabolcs Nagy |
0dee0d |
|
|
Szabolcs Nagy |
0dee0d |
T(r,pthread_condattr_init(&a);;
|
|
Szabolcs Nagy |
0dee0d |
r = pthread_condattr_setclock(&a, CLOCK_PROCESS_CPUTIME_ID);
|
|
Szabolcs Nagy |
0dee0d |
if (r != EINVAL)
|
|
Szabolcs Nagy |
0dee0d |
t_error("pthread_condattr_setclock CLOCK_PROCESS_CPUTIME_ID should fail with EINVAL, got %s\n", strerror(r));
|
|
Szabolcs Nagy |
0dee0d |
r = pthread_condattr_setclock(&a, CLOCK_THREAD_CPUTIME_ID);
|
|
Szabolcs Nagy |
0dee0d |
if (r != EINVAL)
|
|
Szabolcs Nagy |
0dee0d |
t_error("pthread_condattr_setclock CLOCK_THREAD_CPUTIME_ID should fail with EINVAL, got %s\n", strerror(r));
|
|
Szabolcs Nagy |
0dee0d |
T(r,pthread_condattr_getclock(&a, &clk));
|
|
Szabolcs Nagy |
0dee0d |
if (clk != CLOCK_REALTIME)
|
|
Szabolcs Nagy |
0dee0d |
t_error("condattr default clock is %d, wanted CLOCK_REALTIME (%d)\n", (int)clk, (int)CLOCK_REALTIME);
|
|
Szabolcs Nagy |
0dee0d |
|
|
Szabolcs Nagy |
0dee0d |
T(r,pthread_cond_init(&c, &a);;
|
|
Szabolcs Nagy |
0dee0d |
T(r,pthread_mutex_init(&m, 0));
|
|
Szabolcs Nagy |
0dee0d |
T(r,pthread_mutex_lock(&m);;
|
|
Szabolcs Nagy |
0dee0d |
r = clock_gettime(CLOCK_REALTIME, &ts);
|
|
Szabolcs Nagy |
0dee0d |
if (r)
|
|
Szabolcs Nagy |
0dee0d |
t_error("clock_gettime failed: %s\n", strerror(errno));
|
|
Szabolcs Nagy |
0dee0d |
/* wait 10ms */
|
|
Szabolcs Nagy |
0dee0d |
ts.tv_nsec += 10*1000*1000;
|
|
Szabolcs Nagy |
0dee0d |
if (ts.tv_nsec >= 1000*1000*1000) {
|
|
Szabolcs Nagy |
0dee0d |
ts.tv_nsec -= 1000*1000*1000;
|
|
Szabolcs Nagy |
0dee0d |
ts.tv_sec += 1;
|
|
Szabolcs Nagy |
0dee0d |
}
|
|
Szabolcs Nagy |
0dee0d |
r = pthread_cond_timedwait(&c, &m, &ts);
|
|
Szabolcs Nagy |
0dee0d |
if (r != ETIMEDOUT)
|
|
Szabolcs Nagy |
0dee0d |
t_error("pthread_cond_timedwait did not timeout, returned %s\n", strerror(r));
|
|
Szabolcs Nagy |
0dee0d |
T(r,pthread_mutex_unlock(&m);;
|
|
Szabolcs Nagy |
0dee0d |
|
|
Szabolcs Nagy |
0dee0d |
T(r,pthread_mutex_destroy(&m);;
|
|
Szabolcs Nagy |
0dee0d |
T(r,pthread_cond_destroy(&c);;
|
|
Szabolcs Nagy |
0dee0d |
T(r,pthread_condattr_destroy(&a);;
|
|
Szabolcs Nagy |
0dee0d |
return t_status;
|
|
Szabolcs Nagy |
0dee0d |
}
|