From a7cedbe2204b410414e2f17f00c698d2be2f66ed Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Wed, 7 Nov 2012 16:10:55 +0100 Subject: [PATCH] darwin: fix uv_hrtime() thread safety issue --- src/unix/darwin.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/unix/darwin.c b/src/unix/darwin.c index cc7c817c..9de27db9 100644 --- a/src/unix/darwin.c +++ b/src/unix/darwin.c @@ -174,19 +174,12 @@ void uv__cf_loop_signal(uv_loop_t* loop, cf_loop_signal_cb cb, void* arg) { uint64_t uv_hrtime(void) { - uint64_t time; - uint64_t enano; - static mach_timebase_info_data_t sTimebaseInfo; + mach_timebase_info_data_t info; - time = mach_absolute_time(); + if (mach_timebase_info(&info) != KERN_SUCCESS) + abort(); - if (0 == sTimebaseInfo.denom) { - (void)mach_timebase_info(&sTimebaseInfo); - } - - enano = time * sTimebaseInfo.numer / sTimebaseInfo.denom; - - return enano; + return mach_absolute_time() * info.numer / info.denom; }