diff --git a/src/clock.cpp b/src/clock.cpp index 97e94fb0..5701d88d 100644 --- a/src/clock.cpp +++ b/src/clock.cpp @@ -42,6 +42,28 @@ #include #endif +#if defined ZMQ_HAVE_OSX +#include +#include +#include +#include + +int clock_gettime (int clock_id, timespec *ts) +{ + // The clock_id specified is not supported on this system. + if (clock_id != CLOCK_REALTIME) + return EINVAL; + + clock_serv_t cclock; + mach_timespec_t mts; + host_get_clock_service (mach_host_self (), CALENDAR_CLOCK, &cclock); + clock_get_time (cclock, &mts); + mach_port_deallocate (mach_task_self (), cclock); + ts->tv_sec = mts.tv_sec; + ts->tv_nsec = mts.tv_nsec; +} +#endif + #ifdef ZMQ_HAVE_WINDOWS typedef ULONGLONG (*f_compatible_get_tick_count64)(); diff --git a/src/clock.hpp b/src/clock.hpp index 4db695f7..e7eeb900 100644 --- a/src/clock.hpp +++ b/src/clock.hpp @@ -22,6 +22,16 @@ #include "stdint.hpp" +#if defined ZMQ_HAVE_OSX +#include +#include +#include +#include +int clock_gettime (int clock_id, timespec *ts); +#define CLOCK_REALTIME 0 +#define HAVE_CLOCK_GETTIME +#endif + namespace zmq { diff --git a/src/condition_variable.hpp b/src/condition_variable.hpp index 265bc9cc..e6c6c52b 100644 --- a/src/condition_variable.hpp +++ b/src/condition_variable.hpp @@ -21,6 +21,7 @@ #define __ZMQ_CONDITON_VARIABLE_HPP_INCLUDED__ #include "platform.hpp" +#include "clock.hpp" #include "err.hpp" #include "mutex.hpp" diff --git a/src/mailbox_safe.cpp b/src/mailbox_safe.cpp index df0e191d..9aa73766 100644 --- a/src/mailbox_safe.cpp +++ b/src/mailbox_safe.cpp @@ -18,6 +18,7 @@ */ #include "mailbox_safe.hpp" +#include "clock.hpp" #include "err.hpp" zmq::mailbox_safe_t::mailbox_safe_t (mutex_t* sync_) :