Change interfaces of OS_real_time_clock and OS_process_clock to return
authorChris Hanson <org/chris-hanson/cph>
Thu, 1 Jul 1993 22:29:59 +0000 (22:29 +0000)
committerChris Hanson <org/chris-hanson/cph>
Thu, 1 Jul 1993 22:29:59 +0000 (22:29 +0000)
double instead of clock_t.  This combined with changes in the
implementations of these procedures should prevent wraparound of these
clocks.

v7/src/microcode/dosenv.c
v7/src/microcode/ntenv.c
v7/src/microcode/osenv.h
v7/src/microcode/prosenv.c
v7/src/microcode/uxenv.c

index bec22c8848ea7e0cdd1be3faef182a6358459ef5..e76d02abfea3360a174d3a41fe2d015d34b723f9 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: dosenv.c,v 1.3 1993/01/12 19:48:36 gjr Exp $
+$Id: dosenv.c,v 1.4 1993/07/01 22:29:56 cph Exp $
 
 Copyright (c) 1992-1993 Massachusetts Institute of Technology
 
@@ -83,18 +83,23 @@ DEFUN (OS_encode_time ,(buffer), struct time_structure * buffer)
   return (t);
 }
 
-clock_t
-DEFUN_VOID (OS_process_clock)
+double
+DEFUN_VOID (OS_real_time_clock)
 {
-  /* This must not signal an error in normal use. */
-  /* Return answer in milliseconds, was in 1/100th seconds */
-  return (clock()*((clock_t) (1000/CLOCKS_PER_SEC)));
+  /* Jump through hoops because `clock()' wraps around to zero after
+     one day and `time()' has at best resolution of one second.  */
+  return
+    (((((double) (((long) (OS_encoded_time ())) / 60L)) * 60.0)
+      + (((double) (((long) (clock ())) % (60L * ((long) CLOCKS_PER_SEC))))
+        / ((double) CLOCKS_PER_SEC)))
+     * 1000.0);
 }
 
-clock_t
-DEFUN_VOID (OS_real_time_clock)
+double
+DEFUN_VOID (OS_process_clock)
 {
-  return (clock()*((clock_t) (1000/CLOCKS_PER_SEC)));
+  /* This must not signal an error in normal use. */
+  return (OS_real_time_clock);
 }
 \f
 /* Timer adjustments */
index 11bac33ca16bb740e8cf12779d25d4e6cd5419ec..a6a3e53b84516d8499c0acef215f06921af31e58 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: ntenv.c,v 1.2 1993/06/24 01:52:11 gjr Exp $
+$Id: ntenv.c,v 1.3 1993/07/01 22:29:57 cph Exp $
 
 Copyright (c) 1992-1993 Massachusetts Institute of Technology
 
@@ -87,18 +87,18 @@ DEFUN (OS_encode_time ,(buffer), struct time_structure * buffer)
   return (t);
 }
 
-clock_t
+double
 DEFUN_VOID (OS_process_clock)
 {
   /* This must not signal an error in normal use. */
   /* Return answer in milliseconds, was in 1/100th seconds */
-  return (clock()*((clock_t) (1000/CLOCKS_PER_SEC)));
+  return ((((double) (clock ())) * 1000.0) / ((double) CLOCKS_PER_SEC));
 }
 
-clock_t
+double
 DEFUN_VOID (OS_real_time_clock)
 {
-  return (clock()*((clock_t) (1000/CLOCKS_PER_SEC)));
+  return ((((double) (clock ())) * 1000.0) / ((double) CLOCKS_PER_SEC))
 }
 \f
 /* Timer adjustments */
index dd6edc2c2ed58d8e0ece14227b6ebe9602cd3176..41af186e934bafb8597aafc70af92b8ba7cb8486 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: osenv.h,v 1.3 1993/01/12 19:48:12 gjr Exp $
+$Id: osenv.h,v 1.4 1993/07/01 22:29:57 cph Exp $
 
 Copyright (c) 1990-1993 Massachusetts Institute of Technology
 
@@ -51,8 +51,8 @@ struct time_structure
 extern time_t EXFUN (OS_encoded_time, ());
 extern void EXFUN (OS_decode_time, (time_t, struct time_structure * ts));
 extern time_t EXFUN (OS_encode_time, (struct time_structure * ts));
-extern clock_t EXFUN (OS_process_clock, (void));
-extern clock_t EXFUN (OS_real_time_clock, (void));
+extern double EXFUN (OS_process_clock, (void));
+extern double EXFUN (OS_real_time_clock, (void));
 extern void EXFUN (OS_process_timer_set, (clock_t first, clock_t interval));
 extern void EXFUN (OS_process_timer_clear, (void));
 extern void EXFUN (OS_real_timer_set, (clock_t first, clock_t interval));
index 33098fe41b067ce17341c75c257618c8e8f5115a..fd127075308cbfbefd451269fd33207c9f2cf839 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: prosenv.c,v 1.8 1993/01/12 19:48:19 gjr Exp $
+$Id: prosenv.c,v 1.9 1993/07/01 22:29:58 cph Exp $
 
 Copyright (c) 1987-1993 Massachusetts Institute of Technology
 
@@ -123,14 +123,14 @@ DEFINE_PRIMITIVE ("SYSTEM-CLOCK", Prim_system_clock, 0, 0,
   "Return the current process time in units of milliseconds.")
 {
   PRIMITIVE_HEADER (0);
-  PRIMITIVE_RETURN (ulong_to_integer (OS_process_clock ()));
+  PRIMITIVE_RETURN (double_to_integer (OS_process_clock ()));
 }
 
 DEFINE_PRIMITIVE ("REAL-TIME-CLOCK", Prim_real_time_clock, 0, 0,
   "Return the current real time in units of milliseconds.")
 {
   PRIMITIVE_HEADER (0);
-  PRIMITIVE_RETURN (ulong_to_integer (OS_real_time_clock ()));
+  PRIMITIVE_RETURN (double_to_integer (OS_real_time_clock ()));
 }
 
 DEFINE_PRIMITIVE ("PROCESS-TIMER-CLEAR", Prim_process_timer_clear, 0, 0,
index 433b5ab231b047958c13bf96ad534018b7abc8d6..e2bc44baa155e9184b08a8d500b48779042c913e 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: uxenv.c,v 1.10 1993/02/06 05:42:47 gjr Exp $
+$Id: uxenv.c,v 1.11 1993/07/01 22:29:59 cph Exp $
 
 Copyright (c) 1990-1993 Massachusetts Institute of Technology
 
@@ -104,10 +104,10 @@ DEFUN_VOID (initialize_process_clock)
   initial_process_clock = (buffer . tms_utime);
 }
 
-clock_t
+double
 DEFUN_VOID (OS_process_clock)
 {
-  clock_t ct = (UX_SC_CLK_TCK ());
+  double ct = ((double) (UX_SC_CLK_TCK ()));
   struct tms buffer;
   /* Was STD_VOID_SYSTEM_CALL, but at least one version of Ultrix
      returns negative numbers other than -1 when there are no errors.  */
@@ -115,8 +115,9 @@ DEFUN_VOID (OS_process_clock)
     if (errno != EINTR)
       error_system_call (errno, syscall_times);
   return
-    (((((buffer . tms_utime) - initial_process_clock) * 2000) + ct) /
-     (2 * ct));
+    (((((double) ((buffer . tms_utime) - initial_process_clock)) * 2000.0)
+      + ct)
+     / (2.0 * ct));
 }
 
 #else /* not HAVE_TIMES */
@@ -126,11 +127,11 @@ DEFUN_VOID (initialize_process_clock)
 {
 }
 
-clock_t
+double
 DEFUN_VOID (OS_process_clock)
 {
   /* This must not signal an error in normal use. */
-  return (0);
+  return (0.0);
 }
 
 #endif /* HAVE_TIMES */
@@ -146,7 +147,7 @@ DEFUN_VOID (initialize_real_time_clock)
   UX_gettimeofday ((&initial_rtc), (&tz));
 }
 
-clock_t
+double
 DEFUN_VOID (OS_real_time_clock)
 {
   struct timeval rtc;
@@ -154,8 +155,9 @@ DEFUN_VOID (OS_real_time_clock)
   STD_VOID_SYSTEM_CALL
     (syscall_gettimeofday, (UX_gettimeofday ((&rtc), (&tz))));
   return
-    ((((rtc . tv_sec) - (initial_rtc . tv_sec)) * 1000) +
-     ((((rtc . tv_usec) - (initial_rtc . tv_usec)) + 500) / 1000));
+    ((((double) ((rtc . tv_sec) - (initial_rtc . tv_sec))) * 1000.0) +
+     ((((double) ((rtc . tv_usec) - (initial_rtc . tv_usec))) + 500.0)
+      / 1000.0));
 }
 
 #else /* not HAVE_GETTIMEOFDAY */
@@ -170,10 +172,10 @@ DEFUN_VOID (initialize_real_time_clock)
   initial_rtc = (UX_times (&buffer));
 }
 
-clock_t
+double
 DEFUN_VOID (OS_real_time_clock)
 {
-  clock_t ct = (UX_SC_CLK_TCK ());
+  double ct = ((double) (UX_SC_CLK_TCK ()));
   struct tms buffer;
   clock_t t;
   /* Was STD_UINT_SYSTEM_CALL, but at least one version of Ultrix
@@ -181,7 +183,7 @@ DEFUN_VOID (OS_real_time_clock)
   while ((t = (UX_times (&buffer))) == (-1))
     if (errno != EINTR)
       error_system_call (errno, syscall_times);
-  return ((((t - initial_rtc) * 2000) + ct) / (2 * ct));
+  return (((((double) (t - initial_rtc)) * 2000.0) + ct) / (2.0 * ct));
 }
 
 #else /* not HAVE_TIMES */
@@ -194,12 +196,12 @@ DEFUN_VOID (initialize_real_time_clock)
   initial_rtc = (time (0));
 }
 
-clock_t
+double
 DEFUN_VOID (OS_real_time_clock)
 {
   time_t t;
   STD_UINT_SYSTEM_CALL (syscall_time, t, (UX_time (0)));
-  return ((t - initial_rtc) * 1000);
+  return (((double) (t - initial_rtc)) * 1000.0);
 }
 
 #endif /* HAVE_TIMES */