[glib] Simplify checks for CLOCK_MONOTONIC
- From: Dan Winship <danw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] Simplify checks for CLOCK_MONOTONIC
- Date: Wed, 12 Oct 2011 13:00:03 +0000 (UTC)
commit 71cf70b39cd3859ac4cb4954c369bda731a61171
Author: Dan Winship <danw gnome org>
Date: Tue Oct 11 15:38:37 2011 -0400
Simplify checks for CLOCK_MONOTONIC
Remove the complicated configure-time and runtime checks, and just use
CLOCK_MONOTONIC if it's defined.
https://bugzilla.gnome.org/show_bug.cgi?id=661421
configure.ac | 15 ----------
glib/gmain.c | 84 +++++++++++++++++++++++----------------------------------
2 files changed, 34 insertions(+), 65 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 4a9e723..e6feb1d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2402,21 +2402,6 @@ AC_CHECK_FUNCS(clock_gettime, [], [
])
AC_SUBST(GLIB_RT_LIBS)
-AC_CACHE_CHECK(for monotonic clocks,
- glib_cv_monotonic_clock,AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
-#include <time.h>
-#include <unistd.h>
-int main() {
-#if !(defined(_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK >= 0 && defined(CLOCK_MONOTONIC))
- #error No monotonic clock
-#endif
- return 0;
-}
-]])],glib_cv_monotonic_clock=yes,glib_cv_monotonic_clock=no))
-if test "$glib_cv_monotonic_clock" = "yes"; then
- AC_DEFINE(HAVE_MONOTONIC_CLOCK,1,[Have a monotonic clock])
-fi
-
dnl ************************
dnl *** g_atomic_* tests ***
diff --git a/glib/gmain.c b/glib/gmain.c
index 5250453..3cf1fa8 100644
--- a/glib/gmain.c
+++ b/glib/gmain.c
@@ -2013,66 +2013,50 @@ g_get_monotonic_time (void)
{
#ifdef HAVE_CLOCK_GETTIME
/* librt clock_gettime() is our first choice */
- {
-#ifdef HAVE_MONOTONIC_CLOCK
- static volatile gsize clockid = 0;
+ struct timespec ts;
+
+#ifdef CLOCK_MONOTONIC
+ clock_gettime (CLOCK_MONOTONIC, &ts);
#else
- static clockid_t clockid = CLOCK_REALTIME;
-#endif
- struct timespec ts;
-
-#ifdef HAVE_MONOTONIC_CLOCK
- if (g_once_init_enter (&clockid))
- {
- clockid_t best_clockid;
-
- if (sysconf (_SC_MONOTONIC_CLOCK) >= 0)
- best_clockid = CLOCK_MONOTONIC;
- else
- best_clockid = CLOCK_REALTIME;
- g_once_init_leave (&clockid, (gsize)best_clockid);
- }
+ clock_gettime (CLOCK_REALTIME, &ts);
#endif
- clock_gettime (clockid, &ts);
-
- /* In theory monotonic time can have any epoch.
- *
- * glib presently assumes the following:
- *
- * 1) The epoch comes some time after the birth of Jesus of Nazareth, but
- * not more than 10000 years later.
- *
- * 2) The current time also falls sometime within this range.
- *
- * These two reasonable assumptions leave us with a maximum deviation from
- * the epoch of 10000 years, or 315569520000000000 seconds.
- *
- * If we restrict ourselves to this range then the number of microseconds
- * will always fit well inside the constraints of a int64 (by a factor of
- * about 29).
- *
- * If you actually hit the following assertion, probably you should file a
- * bug against your operating system for being excessively silly.
- **/
- g_assert (G_GINT64_CONSTANT (-315569520000000000) < ts.tv_sec &&
- ts.tv_sec < G_GINT64_CONSTANT (315569520000000000));
-
- return (((gint64) ts.tv_sec) * 1000000) + (ts.tv_nsec / 1000);
- }
-#else
+ /* In theory monotonic time can have any epoch.
+ *
+ * glib presently assumes the following:
+ *
+ * 1) The epoch comes some time after the birth of Jesus of Nazareth, but
+ * not more than 10000 years later.
+ *
+ * 2) The current time also falls sometime within this range.
+ *
+ * These two reasonable assumptions leave us with a maximum deviation from
+ * the epoch of 10000 years, or 315569520000000000 seconds.
+ *
+ * If we restrict ourselves to this range then the number of microseconds
+ * will always fit well inside the constraints of a int64 (by a factor of
+ * about 29).
+ *
+ * If you actually hit the following assertion, probably you should file a
+ * bug against your operating system for being excessively silly.
+ **/
+ g_assert (G_GINT64_CONSTANT (-315569520000000000) < ts.tv_sec &&
+ ts.tv_sec < G_GINT64_CONSTANT (315569520000000000));
+
+ return (((gint64) ts.tv_sec) * 1000000) + (ts.tv_nsec / 1000);
+
+#else /* !HAVE_CLOCK_GETTIME */
+
/* It may look like we are discarding accuracy on Windows (since its
* current time is expressed in 100s of nanoseconds) but according to
* many sources, the time is only updated 64 times per second, so
* microsecond accuracy is more than enough.
*/
- {
- GTimeVal tv;
+ GTimeVal tv;
- g_get_current_time (&tv);
+ g_get_current_time (&tv);
- return (((gint64) tv.tv_sec) * 1000000) + tv.tv_usec;
- }
+ return (((gint64) tv.tv_sec) * 1000000) + tv.tv_usec;
#endif
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]