diff options
author | David M. Lee <dlee@respoke.io> | 2015-07-24 17:04:35 -0500 |
---|---|---|
committer | David M. Lee <dlee@respoke.io> | 2015-08-07 19:35:13 -0500 |
commit | 40caf0ad9bef07bdfb568a88192c157dd1840100 (patch) | |
tree | 01d1e4f6745b5eeaeb607e5bb85a2884a6ff9087 /include | |
parent | 309dd2a4090ccdd1ea31d8d5415a645daddd3883 (diff) |
Replaces clock_gettime() with ast_tsnow()
clock_gettime() is, unfortunately, not portable. But I did like that
over our usual `ts.tv_nsec = tv.tv_usec * 1000` copy/paste code we
usually do when we want a timespec and all we have is ast_tvnow().
This patch adds ast_tsnow(), which mimics ast_tvnow(), but returns a
timespec. If clock_gettime() is available, it will use that. Otherwise
ast_tsnow() falls back to using ast_tvnow().
Change-Id: Ibb1ee67ccf4826b9b76d5a5eb62e90b29b6c456e
Diffstat (limited to 'include')
-rw-r--r-- | include/asterisk/autoconfig.h.in | 3 | ||||
-rw-r--r-- | include/asterisk/time.h | 34 |
2 files changed, 37 insertions, 0 deletions
diff --git a/include/asterisk/autoconfig.h.in b/include/asterisk/autoconfig.h.in index 6b41a8c9a..c0c34736b 100644 --- a/include/asterisk/autoconfig.h.in +++ b/include/asterisk/autoconfig.h.in @@ -764,6 +764,9 @@ /* Define to 1 if you have the `roundl' function. */ #undef HAVE_ROUNDL +/* Define to 1 if rt has the Realtime functions feature. */ +#undef HAVE_RT + /* Define if your system has the RTLD_NOLOAD headers. */ #undef HAVE_RTLD_NOLOAD diff --git a/include/asterisk/time.h b/include/asterisk/time.h index f2382df33..529490630 100644 --- a/include/asterisk/time.h +++ b/include/asterisk/time.h @@ -23,10 +23,16 @@ #ifndef _ASTERISK_TIME_H #define _ASTERISK_TIME_H +#include "asterisk/autoconfig.h" + #ifdef HAVE_SYS_TIME_H #include <sys/time.h> #endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif + #include "asterisk/inline_api.h" /* We have to let the compiler learn what types to use for the elements of a @@ -142,6 +148,34 @@ struct timeval ast_tvnow(void), ) /*! + * \brief Returns current timespec. Meant to avoid calling ast_tvnow() just to + * create a timespec from the timeval it returns. + */ +#if defined _POSIX_TIMERS && _POSIX_TIMERS > 0 +AST_INLINE_API( +struct timespec ast_tsnow(void), +{ + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + return ts; +} +) +#else +AST_INLINE_API( +struct timespec ast_tsnow(void), +{ + struct timeval tv = ast_tvnow(); + struct timespec ts; + /* Can't use designated initializer, because it does odd things with + * the AST_INLINE_API macro. Go figure. */ + ts.tv_sec = tv.tv_sec; + ts.tv_nsec = tv.tv_usec * 1000; + return ts; +} +) +#endif + +/*! * \brief Returns the sum of two timevals a + b */ struct timeval ast_tvadd(struct timeval a, struct timeval b); |