Version 2.0.8
[lttng-ust.git] / liblttng-ust / clock.h
index 95e3e43b16d0863f412c10082151f3c924ab9cbe..82a7b45cd5294a3f35c63e172ea8105d0e5c2e0d 100644 (file)
 #include <sys/time.h>
 #include <stdint.h>
 #include <stddef.h>
+#include <stdio.h>
+
+/*
+ * Includes final \0.
+ */
+#define CLOCK_UUID_LEN         37
 
 /* TRACE CLOCK */
 
@@ -50,9 +56,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, CLOCK_UUID_LEN - 1, fp);
+       if (len < CLOCK_UUID_LEN - 1) {
+               ret = -EINVAL;
+               goto end;
+       }
+       uuid[CLOCK_UUID_LEN - 1] = '\0';
+end:
+       fclose(fp);
+       return ret;
 }
 
 #endif /* _UST_CLOCK_H */
This page took 0.03557 seconds and 4 git commands to generate.