Use Client_find_by_session() instead of a few open-coded loops.
[umurmur.git] / src / timer.c
index 55f5f9cf2905e82492dbbbdaf9e17d6a9fd5d4bf..bfc182cb5ba7e8a8167f03bfadf6855bfc43ee9e 100644 (file)
@@ -1,5 +1,5 @@
-/* Copyright (C) 2009-2013, Martin Johansson <martin@fatbob.nu>
-   Copyright (C) 2005-2013, Thorvald Natvig <thorvald@natvig.com>
+/* Copyright (C) 2009-2014, Martin Johansson <martin@fatbob.nu>
+   Copyright (C) 2005-2014, Thorvald Natvig <thorvald@natvig.com>
 
    All rights reserved.
 
    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
-#include <sys/time.h>
+#include <time.h>
 #include <stdint.h>
 #include <stdio.h>
 
+#ifdef __MACH__
+#include <mach/clock.h>
+#include <mach/mach.h>
+#endif
+
 #include "timer.h"
 
 static uint64_t Timer_now()
 {
        struct timespec ts;
        uint64_t e;
-       
-        clock_gettime(CLOCK_MONOTONIC, &ts);
-        e = ts.tv_sec * 1000000LL;
-        e += ts.tv_nsec / 1000LL; //convert to microseconds
+
+#ifdef __MACH__
+  clock_serv_t clock;
+  mach_timespec_t mts;
+  host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &clock);
+  clock_get_time(clock, &mts);
+  mach_port_deallocate(mach_task_self(), clock);
+  ts.tv_sec = mts.tv_sec;
+  ts.tv_nsec = mts.tv_nsec;
+#else
+  clock_gettime(CLOCK_MONOTONIC, &ts);
+#endif
+  e = ts.tv_sec * 1000000LL;
+  e += ts.tv_nsec / 1000LL; //convert to microseconds
        return e;
 }