blob: f375c171981961ff7860bdbc58531c7f352f9bab [file] [log] [blame]
/* -*- Mode: C; tab-width: 8; c-basic-offset: 2; indent-tabs-mode: nil; -*- */
#include "util.h"
int main(void) {
int fd = timerfd_create(CLOCK_MONOTONIC, 0);
struct itimerspec spec, old;
uint64_t num_expirations;
atomic_printf("created timerfd %d\n", fd);
test_assert(fd >= 0);
memset(&spec, 0, sizeof(spec));
spec.it_value.tv_nsec = 100000000;
atomic_printf("setting timer to expire in {sec:%ld,nsec:%ld}\n",
spec.it_value.tv_sec, spec.it_value.tv_nsec);
timerfd_settime(fd, 0, &spec, &old);
atomic_printf(" (old expiration was {sec:%ld,nsec:%ld})\n",
old.it_value.tv_sec, old.it_value.tv_nsec);
test_assert(0 == old.it_value.tv_sec && 0 == old.it_value.tv_nsec);
atomic_puts("sleeping 50ms ...");
usleep(50000);
timerfd_gettime(fd, &old);
atomic_printf(" expiration now in {sec:%ld,nsec:%ld})\n",
old.it_value.tv_sec, old.it_value.tv_nsec);
test_assert(0 == old.it_value.tv_sec && old.it_value.tv_nsec <= 50000000);
atomic_puts("waiting for timer to expire ...");
read(fd, &num_expirations, sizeof(num_expirations));
atomic_printf(" timer expired %" PRIu64 " times\n", num_expirations);
test_assert(1 == num_expirations);
atomic_puts("EXIT-SUCCESS");
return 0;
}