Use CSUSeconds rather than CTime in getClockTime. Fixes #4970.
authorWilliam Knop <william.knop.nospam@gmail.com>
Tue, 5 Apr 2011 01:15:27 +0000 (21:15 -0400)
committerIan Lynagh <igloo@earth.li>
Sat, 11 Jun 2011 20:12:17 +0000 (21:12 +0100)
The tv_usec field of struct timeval was incorrectly used as C type time_t; the actual C type is suseconds_t. On OS X, time_t is longer than suseconds_t, which caused garbage bits to be copied as reported in trace #4247 and #4970. This is patch 4 of 4 to fix those tickets.

System/Time.hsc

index 663e875..ecd83c2 100644 (file)
@@ -250,7 +250,7 @@ getClockTime = do
   allocaBytes (#const sizeof(struct timeval)) $ \ p_timeval -> do
     throwErrnoIfMinus1_ "getClockTime" $ gettimeofday p_timeval nullPtr
     sec  <- (#peek struct timeval,tv_sec)  p_timeval :: IO CTime
-    usec <- (#peek struct timeval,tv_usec) p_timeval :: IO CTime
+    usec <- (#peek struct timeval,tv_usec) p_timeval :: IO CSUSeconds
     return (TOD (realToInteger sec) ((realToInteger usec) * 1000000))
  
 #elif HAVE_FTIME