diff options
author | Chris Wilson <chris+github@qwirx.com> | 2006-11-23 19:54:51 +0000 |
---|---|---|
committer | Chris Wilson <chris+github@qwirx.com> | 2006-11-23 19:54:51 +0000 |
commit | 366574d921bf39a356d558ef8d61d78181a7af9b (patch) | |
tree | c71d9042856a032e8627e87158d58664684999da /lib/common | |
parent | ca0c40ce216de416cd8ada05ab369c2971ee4a71 (diff) |
Use gettimeofday() to increase accuracy of GetCurrentBoxTime() on
platforms which support it. Fixes busy waits for 1 second in backup
client when time for next backup is not on a 1 second boundary (which
it never is). (refs #3)
Diffstat (limited to 'lib/common')
-rw-r--r-- | lib/common/BoxTime.cpp | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/lib/common/BoxTime.cpp b/lib/common/BoxTime.cpp index 960fc329..eafb244f 100644 --- a/lib/common/BoxTime.cpp +++ b/lib/common/BoxTime.cpp @@ -9,7 +9,17 @@ #include "Box.h" -#include <time.h> +#ifdef HAVE_SYS_TIME_H + #include <sys/time.h> +#endif +#ifdef HAVE_TIME_H + #include <time.h> +#endif +#ifdef HAVE_SYSLOG_H + #include <syslog.h> +#endif +#include <errno.h> +#include <string.h> #include "BoxTime.h" @@ -19,13 +29,27 @@ // // Function // Name: GetCurrentBoxTime() -// Purpose: Returns the current time as a box time. (1 sec precision) +// Purpose: Returns the current time as a box time. +// (1 sec precision, or better if supported by system) // Created: 2003/10/08 // // -------------------------------------------------------------------------- box_time_t GetCurrentBoxTime() { + #ifdef HAVE_GETTIMEOFDAY + struct timeval tv; + if (gettimeofday(&tv, NULL) != 0) + { + ::syslog(LOG_ERR, "gettimeofday() failed (%s), " + "dropping precision", strerror(errno)); + } + else + { + box_time_t timeNow = (tv.tv_sec * MICRO_SEC_IN_SEC_LL) + + tv.tv_usec; + return timeNow; + } + #endif + return SecondsToBoxTime(time(0)); } - - |