[Box Backup-commit] COMMIT r1171 - in box/chris/merge: . lib/common

boxbackup-dev at fluffy.co.uk boxbackup-dev at fluffy.co.uk
Thu Nov 23 19:54:51 GMT 2006


Author: chris
Date: 2006-11-23 19:54:51 +0000 (Thu, 23 Nov 2006)
New Revision: 1171

Modified:
   box/chris/merge/configure.ac
   box/chris/merge/lib/common/BoxTime.cpp
Log:
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)


Modified: box/chris/merge/configure.ac
===================================================================
--- box/chris/merge/configure.ac	2006-11-14 05:12:03 UTC (rev 1170)
+++ box/chris/merge/configure.ac	2006-11-23 19:54:51 UTC (rev 1171)
@@ -158,7 +158,7 @@
 AC_FUNC_ERROR_AT_LINE
 AC_TYPE_SIGNAL
 AC_FUNC_STAT
-AC_CHECK_FUNCS([getpeereid lchown setproctitle getpid])
+AC_CHECK_FUNCS([getpeereid lchown setproctitle getpid gettimeofday])
 # NetBSD implements kqueue too differently for us to get it fixed by 0.10
 # TODO: Remove this when NetBSD kqueue implementation is working
 netbsd_hack=`echo $target_os | sed 's/netbsd.*/netbsd/'`

Modified: box/chris/merge/lib/common/BoxTime.cpp
===================================================================
--- box/chris/merge/lib/common/BoxTime.cpp	2006-11-14 05:12:03 UTC (rev 1170)
+++ box/chris/merge/lib/common/BoxTime.cpp	2006-11-23 19:54:51 UTC (rev 1171)
@@ -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));
 }
-
-




More information about the Boxbackup-commit mailing list