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
This commit is contained in:
Dan Winship 2011-10-11 15:38:37 -04:00
parent daede1dc27
commit 71cf70b39c
2 changed files with 32 additions and 63 deletions

View File

@ -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 ***

View File

@ -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));
/* 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 */
return (((gint64) ts.tv_sec) * 1000000) + (ts.tv_nsec / 1000);
}
#else
/* 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
}