From 186a80cbcfbe0490ddd153e5f75faac23f4e5021 Mon Sep 17 00:00:00 2001
From: Ian Lynagh <igloo@earth.li>
Date: Mon, 11 Sep 2006 22:32:10 +0000
Subject: [PATCH] Fix ~2000 second profiling time wrapping bug

---
 rts/ProfHeap.c      | 4 ++--
 rts/posix/GetTime.c | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/rts/ProfHeap.c b/rts/ProfHeap.c
index 8f4c8baa2fb6..c161d0c6a798 100644
--- a/rts/ProfHeap.c
+++ b/rts/ProfHeap.c
@@ -386,9 +386,9 @@ printSample(rtsBool beginSample, StgDouble sampleValue)
 {
     StgDouble fractionalPart, integralPart;
     fractionalPart = modf(sampleValue, &integralPart);
-    fprintf(hp_file, "%s %d.%02d\n",
+    fprintf(hp_file, "%s %" FMT_Word64 ".%02" FMT_Word64 "\n",
             (beginSample ? "BEGIN_SAMPLE" : "END_SAMPLE"),
-            (int)integralPart, (int)(fractionalPart * 100));
+            (StgWord64)integralPart, (StgWord64)(fractionalPart * 100));
 }
 
 /* --------------------------------------------------------------------------
diff --git a/rts/posix/GetTime.c b/rts/posix/GetTime.c
index 89d83a31cb35..0e591ef5517e 100644
--- a/rts/posix/GetTime.c
+++ b/rts/posix/GetTime.c
@@ -44,7 +44,7 @@ Ticks getProcessCPUTime(void)
 {
     struct rusage t;
     getrusage(RUSAGE_SELF, &t);
-    return (t.ru_utime.tv_sec * TICKS_PER_SECOND + 
+    return ((Ticks)t.ru_utime.tv_sec * TICKS_PER_SECOND + 
 	    ((Ticks)t.ru_utime.tv_usec * TICKS_PER_SECOND)/1000000);
 }
 
@@ -52,7 +52,7 @@ Ticks getProcessElapsedTime(void)
 {
     struct timeval tv;
     gettimeofday(&tv, (struct timezone *) NULL);
-    return (tv.tv_sec * TICKS_PER_SECOND +
+    return ((Ticks)tv.tv_sec * TICKS_PER_SECOND +
 	    ((Ticks)tv.tv_usec * TICKS_PER_SECOND)/1000000);
 }
 
@@ -120,7 +120,7 @@ Ticks getThreadCPUTime(void)
     // reliable on Linux, but it's the best we have.
     struct timespec ts;
     clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts);
-    return (ts.tv_sec * TICKS_PER_SECOND + 
+    return ((Ticks)ts.tv_sec * TICKS_PER_SECOND + 
 	    ((Ticks)ts.tv_nsec * TICKS_PER_SECOND) / 1000000000);
 #else
     return getProcessCPUTime();
-- 
GitLab