[Openais] [corosync] [patch] - Use clock_gettime for timers
Jim Meyering
jim at meyering.net
Wed Jul 22 08:20:07 PDT 2009
Jan Friesse wrote:
...
> Typo fixed + Jim added to CC.
>
> Jim,
> I don't think logic is so complex, but maybe there is really some better
> solution, I'm not autotools expert.
Hi Jan,
My first reaction was to use clock_gettime unconditionally.
Remove autoconf test, #ifdefs, and alternate gettimeofday implementation.
I suggest this because clock_gettime is so widely available these days.
Here's a list of systems that lack the function:
http://git.sv.gnu.org/cgit/gnulib.git/plain/doc/posix-functions/clock_gettime.texi
Do you care about Mac OS X 10.3?
I think that's the only possibly-viable corosync build system there.
Otherwise, if we were using gnulib, I'd say just add "gethrxtime"
to the list of modules, and then use that function.
Done.
http://git.sv.gnu.org/cgit/gnulib.git/plain/lib/gethrxtime.c
> clock_gettime where is available (this is why configure.ac is modified),
> and when using this functions make sense.
>
> diff --git a/trunk/configure.ac b/trunk/configure.ac
> index bff779a..a30b41c 100644
> --- a/trunk/configure.ac
> +++ b/trunk/configure.ac
> @@ -107,6 +107,26 @@ AC_CHECK_FUNCS([alarm alphasort atexit bzero dup2 endgrent endpwent fcntl \
> pthread_spin_unlock pthread_setschedparam \
> sched_get_priority_max sched_setscheduler])
>
> +# Check for time source to use (monotonic in function clock_gettime, or gettimeofday)
> +if test "x$USE_GETTIMEOFDAY" = "x"
> +then
> + AC_CHECK_FUNCS([clock_gettime],
> + dnl clock_gettime() found
> + [AC_CHECK_DECLS([CLOCK_MONOTONIC],AC_DEFINE([USE_CLOCK_MONOTONIC],,[Clock type to use]),
> + dnl no CLOCK_MONOTONIC
> + [AC_CHECK_FUNCS([gettimeofday],AC_DEFINE([USE_GETTIMEOFDAY],,[Clock type to use]),AC_MSG_ERROR([No suitable clock found]))],
> + dnl for CLOCK_MONOTONIC
> + [#include <time.h>])],
> + dnl clock_gettime() not found
> + [AC_CHECK_FUNCS([gettimeofday],AC_DEFINE([USE_GETTIMEOFDAY],,[Clock type to use]),AC_MSG_ERROR([No suitable clock found]))]
> + )
> +else
> + AC_MSG_NOTICE([Forced to use gettimeofday()])
> + AC_CHECK_FUNCS([gettimeofday],AC_DEFINE([USE_GETTIMEOFDAY],,[Clock type to use]),AC_MSG_ERROR([No suitable clock found]))
This check+define pair is duplicated 3 times, and that nested
implicit if/else (action-if-found, action-if-not-found)
logic is hard to read. Longer-than-80 lines don't help.
If you keep these configure-time tests, it'd be nice not to do that.
Something like this would be more readable:
AC_CHECK_FUNCS([clock_gettime])
AC_CHECK_DECLS([CLOCK_MONOTONIC], [have_decl=1], [have_decl=0], ...)
if test $ac_cv_func_clock_gettime:$have_decl = yes,1; then
# have the function and CLOCK_MONOTONIC
...
else
...
fi
> + AC_CHECK_FUNCS([clock_gettime])
> + AC_CHECK_TYPES([clockid_t])
This check appears unused, since the code doesn't use HAVE_CLOCKID_T.
More information about the Openais
mailing list