[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