From: Juho S. <js...@us...> - 2005-09-03 18:41:38
|
Update of /cvsroot/sbcl/sbcl/src/code In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22251/src/code Modified Files: profile.lisp time.lisp Log Message: 0.9.4.25: Fix problem with GET-INTERNAL-REAL-TIME crashing for processes that have been running for over 49.7 days (reported by Gilbert Baumann on #lisp). * Remove the U-B 32 declarations for values that were suspectible to overflowing in such a short time. This introduces a small amount of extra overhead (<10%) for each call to GET-INTERNAL-(REAL|RUN)-TIME. The accuracy or performance of PROFILE and TIME (the only internal users of this) is not measurably affected by the extra overhead. * Remove some dead comments Index: profile.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/profile.lisp,v retrieving revision 1.33 retrieving revision 1.34 diff -u -d -r1.33 -r1.34 --- profile.lisp 14 Jul 2005 16:30:38 -0000 1.33 +++ profile.lisp 3 Sep 2005 18:41:31 -0000 1.34 @@ -11,11 +11,6 @@ ;;;; reading internal run time with high resolution and low overhead -;;; FIXME: It might make sense to replace this with something -;;; with finer resolution, e.g. milliseconds or microseconds. -;;; For that matter, maybe we should boost the internal clock -;;; up to something faster, like milliseconds. - (defconstant +ticks-per-second+ internal-time-units-per-second) (declaim (inline get-internal-ticks)) Index: time.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/time.lisp,v retrieving revision 1.29 retrieving revision 1.30 diff -u -d -r1.29 -r1.30 --- time.lisp 18 Aug 2005 10:06:32 -0000 1.29 +++ time.lisp 3 Sep 2005 18:41:31 -0000 1.30 @@ -36,11 +36,9 @@ micro-seconds-per-internal-time-unit))) (declare (type (unsigned-byte 32) uint)) (cond (base - (truly-the (unsigned-byte 32) - (+ (the (unsigned-byte 32) - (* (the (unsigned-byte 32) (- seconds base)) - sb!xc:internal-time-units-per-second)) - uint))) + (+ (* (- seconds base) + sb!xc:internal-time-units-per-second) + uint)) (t (setq *internal-real-time-base-seconds* seconds) uint))))) @@ -49,7 +47,6 @@ #!+sb-doc "Return the run time in the internal time format. (See INTERNAL-TIME-UNITS-PER-SECOND.) This is useful for finding CPU usage." - (declare (values (unsigned-byte 32))) (multiple-value-bind (ignore utime-sec utime-usec stime-sec stime-usec) (sb!unix:unix-fast-getrusage sb!unix:rusage_self) (declare (ignore ignore) @@ -59,9 +56,8 @@ ;; documented anywhere and the observed behavior is to ;; sometimes return 1000000 exactly.) (type (integer 0 1000000) utime-usec stime-usec)) - (let ((result (+ (the (unsigned-byte 32) - (* (the (unsigned-byte 32) (+ utime-sec stime-sec)) - sb!xc:internal-time-units-per-second)) + (let ((result (+ (* (+ utime-sec stime-sec) + sb!xc:internal-time-units-per-second) (floor (+ utime-usec stime-usec (floor micro-seconds-per-internal-time-unit 2)) |