From owner-freebsd-bugs@FreeBSD.ORG Mon Feb 18 18:00:07 2008 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 724B816A420 for ; Mon, 18 Feb 2008 18:00:07 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 4D0A713C4E9 for ; Mon, 18 Feb 2008 18:00:07 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.2/8.14.2) with ESMTP id m1II06gg084222 for ; Mon, 18 Feb 2008 18:00:06 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m1II06LB084221; Mon, 18 Feb 2008 18:00:06 GMT (envelope-from gnats) Resent-Date: Mon, 18 Feb 2008 18:00:06 GMT Resent-Message-Id: <200802181800.m1II06LB084221@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Martin Kammerhofer Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C6C0516A46B for ; Mon, 18 Feb 2008 17:56:36 +0000 (UTC) (envelope-from dada@sbox.tugraz.at) Received: from mailrelay.tugraz.at (mailrelay.tu-graz.ac.at [129.27.2.202]) by mx1.freebsd.org (Postfix) with ESMTP id 6CD6113C46E for ; Mon, 18 Feb 2008 17:56:36 +0000 (UTC) (envelope-from dada@sbox.tugraz.at) Received: from webmail.tugraz.at (webmail.tu-graz.ac.at [129.27.2.204]) by mailrelay2.tugraz.at (8.14.2/8.14.2) with ESMTP id m1IHCUYb029730 for ; Mon, 18 Feb 2008 18:12:30 +0100 (CET) Received: from sbox.tugraz.at ([unix socket]) by sbox.tugraz.at (Cyrus v2.3.9-cyrus@sbox.tugraz.at) with LMTPA; Mon, 18 Feb 2008 18:11:26 +0100 Received: from mailrelay.tugraz.at (mailrelay.tu-graz.ac.at [129.27.2.202]) by sbox.tugraz.at (8.14.2/8.14.2) with ESMTP id m1IHBQIH021332 for ; Mon, 18 Feb 2008 18:11:26 +0100 (CET) Received: from pluto.tugraz.at (pluto.tu-graz.ac.at [129.27.3.200]) by mailrelay1.tugraz.at (8.14.2/8.14.2) with ESMTP id m1IHBPRU011352 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Mon, 18 Feb 2008 18:11:25 +0100 (CET) Received: from pluto.tugraz.at (localhost.localdomain [127.0.0.1]) by pluto.tugraz.at (8.13.8/8.13.8) with ESMTP id m1IHBHVj021494 for ; Mon, 18 Feb 2008 18:11:17 +0100 Received: (from dada@localhost) by pluto.tugraz.at (8.13.8/8.13.8/Submit) id m1IHBHI3021493 for dada@sbox.tugraz.at; Mon, 18 Feb 2008 18:11:17 +0100 Message-Id: <200802181711.m1IHBHI3021493@pluto.tugraz.at> Date: Mon, 18 Feb 2008 18:11:17 +0100 From: Martin Kammerhofer To: dada@sbox.tugraz.at Cc: Subject: bin/120813: grdc(6) off by 500 ms (on average) X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Feb 2008 18:00:07 -0000 >Number: 120813 >Category: bin >Synopsis: grdc(6) off by 500 ms (on average) >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Mon Feb 18 18:00:06 UTC 2008 >Closed-Date: >Last-Modified: >Originator: Martin Kammerhofer >Release: FreeBSD 6.3-STABLE i386 >Organization: TUG >Environment: System: FreeBSD Martin.liebt.Susi 6.3-STABLE FreeBSD 6.3-STABLE #1: Fri Feb 1 09:10:38 CET 2008 toor@Martin.liebt.Susi:/usr/obj/usr/src/sys/P2B-S i386 >Description: The grdc(6) program (grand digital clock) draws (with curses) a digital clock and refreshes the display once per second. It uses sleep(1) in the main loop. Therefore the displayed clock will be late by _off_, with 0 <= _off_ < 1 second. On averagE it will be late half a second. This is quite noticeable. >How-To-Repeat: Run /usr/games/grdc in an xterm window alongside a xclock -update 1 and watch! >Fix: --- grdc.c.orig 2008-02-06 20:21:46.000000000 +0100 +++ grdc.c 2008-02-06 20:24:32.000000000 +0100 @@ -14,6 +14,7 @@ * $FreeBSD: src/games/grdc/grdc.c,v 1.12 2003/06/23 16:02:40 will Exp $ */ +#include #include #include #include @@ -55,9 +56,7 @@ } int -main(argc, argv) -int argc; -char **argv; +main (int argc, char **argv) { long t, a; int i, j, s, k; @@ -65,11 +64,16 @@ int ch; int scrol; int t12; +int dflag = 0; +struct timeval tv; t12 = scrol = 0; - while ((ch = getopt(argc, argv, "ts")) != -1) + while ((ch = getopt(argc, argv, "dts")) != -1) switch (ch) { + case 'd': + dflag++; + break; case 's': scrol = 1; break; @@ -138,7 +142,12 @@ } do { mask = 0; - time(&now); + if (gettimeofday(&tv, NULL)) + err(2, "gettimeofday"); + if (dflag) + warnx("woke up @ %ld.%06ld\n", + (long)tv.tv_sec, (long)tv.tv_usec); + now = tv.tv_sec; tm = localtime(&now); set(tm->tm_sec%10, 0); set(tm->tm_sec/10, 4); @@ -193,7 +202,10 @@ } movto(6, 0); refresh(); - sleep(1); + if (gettimeofday(&tv, NULL)) + err(2, "gettimeofday"); + if (tv.tv_sec == now) + usleep(1000000 - tv.tv_usec); if (sigtermed) { standend(); clear(); >Release-Note: >Audit-Trail: >Unformatted: