summaryrefslogtreecommitdiff
path: root/include/asterisk
diff options
context:
space:
mode:
authorDavid M. Lee <dlee@respoke.io>2015-07-24 17:04:35 -0500
committerDavid M. Lee <dlee@respoke.io>2015-08-07 19:35:13 -0500
commit40caf0ad9bef07bdfb568a88192c157dd1840100 (patch)
tree01d1e4f6745b5eeaeb607e5bb85a2884a6ff9087 /include/asterisk
parent309dd2a4090ccdd1ea31d8d5415a645daddd3883 (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/asterisk')
-rw-r--r--include/asterisk/autoconfig.h.in3
-rw-r--r--include/asterisk/time.h34
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);