[GHC] #13504: registerTimeout can wait too little because it uses Doubles for times

GHC ghc-devs at haskell.org
Fri Mar 31 00:51:32 UTC 2017


#13504: registerTimeout can wait too little because it uses Doubles for times
-------------------------------------+-------------------------------------
           Reporter:  nh2            |             Owner:  (none)
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Runtime        |           Version:  8.0.2
  System                             |
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 [https://github.com/ghc/ghc/blob/380b25ea4754c2aea683538ffdb179f8946219a0/libraries/base/GHC/Event/TimerManager.hs#L218
 registerTimeout] uses `getMonotonicTime :: IO Double` and thus goes a
 roundtrip to `Double` when it is perfectly possible to always work on
 integers instead (`getMonotonicTime` obtains integers and then converts
 it).

 This can result in functions like `timeout` to wait too little, as e.g.
 `timeout 4` is converted to `3.997420` seconds, which can violate standard
 expecations of programs that it will wait _at least_ as much as demanded.

 We should export and use the integer based function
 [https://github.com/ghc/ghc/blob/380b25ea4754c2aea683538ffdb179f8946219a0/libraries/base/GHC/Event/Clock.hsc#L15
 GHC.getMonotonicNSec] that `getMonotonicTime` calls.

 Not going through Double will also make inspecting e.g. `strace` more
 obvious.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13504>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list