time-util: add clock_boottime_or_monotonic

CLOCK_BOOTTIME is not supported by timerfd on older kernels, so for the time beeing,
use this helper instead which will fallback to CLOCK_MONOTONIC if CLOCK_BOOTTIME is
not supported.
This commit is contained in:
Tom Gundersen
2014-07-24 19:02:58 +02:00
parent a854881616
commit 77ff2de999
2 changed files with 21 additions and 0 deletions
+19
View File
@@ -22,6 +22,7 @@
#include <time.h>
#include <string.h>
#include <sys/timex.h>
#include <sys/timerfd.h>
#include "util.h"
#include "time-util.h"
@@ -929,3 +930,21 @@ bool timezone_is_valid(const char *name) {
return true;
}
clockid_t clock_boottime_or_monotonic(void) {
static clockid_t clock = -1;
int fd;
if (clock != -1)
return clock;
fd = timerfd_create(CLOCK_BOOTTIME, TFD_NONBLOCK|TFD_CLOEXEC);
if (fd < 0)
clock = CLOCK_MONOTONIC;
else {
safe_close(fd);
clock = CLOCK_BOOTTIME;
}
return clock;
}
+2
View File
@@ -98,3 +98,5 @@ bool ntp_synced(void);
int get_timezones(char ***l);
bool timezone_is_valid(const char *name);
clockid_t clock_boottime_or_monotonic(void);