OSX: Fixup warnings and clock_gettime() bug
authorJens Axboe <axboe@kernel.dk>
Wed, 23 Jan 2013 21:02:23 +0000 (14:02 -0700)
committerJens Axboe <axboe@kernel.dk>
Wed, 23 Jan 2013 21:02:23 +0000 (14:02 -0700)
Signed-off-by: Jens Axboe <axboe@kernel.dk>
engines/posixaio.c
os/os-mac.h

index 0872f9aebbe9ab59bd9d0e21b0ac089b0b1da8e4..a943e5bbf6eaad2c953d21f5c9abd431690fdabf 100644 (file)
@@ -19,13 +19,25 @@ struct posixaio_data {
 
 static int fill_timespec(struct timespec *ts)
 {
-#ifdef _POSIX_TIMERS
-       if (!clock_gettime(CLOCK_MONOTONIC, ts))
+#ifdef CONFIG_CLOCK_GETTIME
+#ifdef CONFIG_CLOCK_MONOTONIC
+       clockid_t clk = CLOCK_MONOTONIC;
+#else
+       clockid_t clk = CLOCK_REALTIME;
+#endif
+       if (!clock_gettime(clk, ts))
                return 0;
 
        perror("clock_gettime");
-#endif
        return 1;
+#else
+       struct timeval tv;
+
+       gettimeofday(&tv, NULL);
+       ts->tv_sec = tv.tv_sec;
+       ts->tv_nsec = tv.tv_usec * 1000;
+       return 0;
+#endif
 }
 
 static unsigned long long ts_utime_since_now(struct timespec *t)
@@ -91,6 +103,8 @@ static int fio_posixaio_getevents(struct thread_data *td, unsigned int min,
 
        if (t && !fill_timespec(&start))
                have_timeout = 1;
+       else
+               memset(&start, 0, sizeof(start));
 
        r = 0;
        memset(suspend_list, 0, sizeof(*suspend_list));
index 0f351a78a2ab4a258c1a9b13389ff212960cdd3b..c8d7dcae6cc1caf3bc28d2a61e3d98bac8b0e779 100644 (file)
 
 #include "../file.h"
 
-#ifndef CLOCK_MONOTONIC
-#define CLOCK_MONOTONIC 1
-#endif
-
 #ifndef CLOCK_REALTIME
 #define CLOCK_REALTIME 1
 #endif
@@ -177,4 +173,11 @@ static inline int gettid(void)
 {
        return mach_thread_self();
 }
+
+/*
+ * For some reason, there's no header definition for fdatasync(), even
+ * if it exists.
+ */
+extern int fdatasync(int fd);
+
 #endif