X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=liblttng-ust%2Fclock.h;h=b4d17e785e164e3ae9a59c89fd7a897853754bc8;hb=19d8b1b3cecac9a52cf8e0e381854703c141ec5e;hp=95e3e43b16d0863f412c10082151f3c924ab9cbe;hpb=28b120498f554e2478806c27f7bf7ab295f3ffdf;p=lttng-ust.git diff --git a/liblttng-ust/clock.h b/liblttng-ust/clock.h index 95e3e43b..b4d17e78 100644 --- a/liblttng-ust/clock.h +++ b/liblttng-ust/clock.h @@ -24,6 +24,8 @@ #include #include #include +#include +#include "uuid.h" /* TRACE CLOCK */ @@ -50,9 +52,30 @@ uint64_t trace_clock_freq(void) } static __inline__ -const char *trace_clock_uuid(void) +const int trace_clock_uuid(char *uuid) { - return "CLOCK_MONOTONIC"; + int ret = 0; + size_t len; + FILE *fp; + + /* + * boot_id needs to be read once before being used concurrently + * to deal with a Linux kernel race. A fix is proposed for + * upstream, but the work-around is needed for older kernels. + */ + fp = fopen("/proc/sys/kernel/random/boot_id", "r"); + if (!fp) { + return -ENOENT; + } + len = fread(uuid, 1, LTTNG_UST_UUID_STR_LEN - 1, fp); + if (len < LTTNG_UST_UUID_STR_LEN - 1) { + ret = -EINVAL; + goto end; + } + uuid[LTTNG_UST_UUID_STR_LEN - 1] = '\0'; +end: + fclose(fp); + return ret; } #endif /* _UST_CLOCK_H */