Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Aug 2010 20:56:23 +0000 (UTC)
From:      Ulrich Spoerlein <uqs@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r210827 - head/games/grdc
Message-ID:  <201008032056.o73KuNVh058700@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: uqs
Date: Tue Aug  3 20:56:23 2010
New Revision: 210827
URL: http://svn.freebsd.org/changeset/base/210827

Log:
  grdc(6): de-obfuscate the timekeeping of now/delay
  
  - 'now' only contains current time readings
  - delay is only used as parameter to nanosleep
  - prev_sec contains the time_t of the previous loop iteration
  
  Submitted by:	bde
  MFC after:	2 weeks

Modified:
  head/games/grdc/grdc.c

Modified: head/games/grdc/grdc.c
==============================================================================
--- head/games/grdc/grdc.c	Tue Aug  3 19:25:58 2010	(r210826)
+++ head/games/grdc/grdc.c	Tue Aug  3 20:56:23 2010	(r210827)
@@ -55,6 +55,7 @@ int
 main(int argc, char *argv[])
 {
 	struct timespec delay;
+	time_t prev_sec;
 	long t, a;
 	int i, j, s, k;
 	int n;
@@ -138,6 +139,7 @@ main(int argc, char *argv[])
 		attrset(COLOR_PAIR(2));
 	}
 	clock_gettime(CLOCK_REALTIME_FAST, &now);
+	prev_sec = now.tv_sec;
 	do {
 		mask = 0;
 		tm = localtime(&now.tv_sec);
@@ -194,20 +196,20 @@ main(int argc, char *argv[])
 		}
 		movto(6, 0);
 		refresh();
-		clock_gettime(CLOCK_REALTIME_FAST, &delay);
-		if (delay.tv_sec == now.tv_sec) {
+		clock_gettime(CLOCK_REALTIME_FAST, &now);
+		if (now.tv_sec == prev_sec) {
 			if (delay.tv_nsec > 0) {
 				delay.tv_sec = 0;
-				delay.tv_nsec = 1000000000 - delay.tv_nsec;
+				delay.tv_nsec = 1000000000 - now.tv_nsec;
 			} else {
 				delay.tv_sec = 1;
 				delay.tv_nsec = 0;
 			}
 			nanosleep(&delay, NULL);
-			clock_gettime(CLOCK_REALTIME_FAST, &delay);
+			clock_gettime(CLOCK_REALTIME_FAST, &now);
 		}
-		n -= delay.tv_sec - now.tv_sec;
-		now.tv_sec = delay.tv_sec;
+		n -= now.tv_sec - prev_sec;
+		prev_sec = now.tv_sec;
 		if (sigtermed) {
 			standend();
 			clear();



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008032056.o73KuNVh058700>