diff options
author | Niklas Hambüchen <mail@nh2.me> | 2017-11-23 13:17:24 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2017-11-24 11:36:55 -0500 |
commit | f209e6672fe33235bd1d4c20c87894021cf3bbc8 (patch) | |
tree | c8ced3817f0649ca7ff005d4029e09418a530d57 /rts | |
parent | 99089fc9240c39726d5b2a50942fb693c48c2bcd (diff) | |
download | haskell-f209e6672fe33235bd1d4c20c87894021cf3bbc8.tar.gz |
base: fdReady(): Fix timeouts > ~49 days overflowing. Fixes #14262.
On 64-bit UNIX and Windows, Haskell `Int` has 64 bits
but C `int msecs` has 32 bits, resulting in an overflow.
This commit fixes it by switching fdReady() to take int64_t,
into which a Haskell `Int` will always fit.
(Note we could not switch to `long long` because that is
32 bit on 64-bit Windows machines.)
Further, to be able to actually wait longer than ~49 days,
we put loops around the waiting syscalls (they all accept only
32-bit integers).
Note the timer signal would typically interrupt the syscalls
before the ~49 days are over, but you can run Haskell programs
without the timer signal, an we want it to be correct in all
cases.
Reviewers: bgamari, austin, hvr, NicolasT, Phyx
Reviewed By: bgamari, Phyx
Subscribers: syd, Phyx, rwbarton, thomie
GHC Trac Issues: #14262
Differential Revision: https://phabricator.haskell.org/D4011
Diffstat (limited to 'rts')
-rw-r--r-- | rts/RtsSymbols.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/rts/RtsSymbols.c b/rts/RtsSymbols.c index dd233fad36..2ea6713eee 100644 --- a/rts/RtsSymbols.c +++ b/rts/RtsSymbols.c @@ -913,6 +913,7 @@ SymI_HasProto(store_load_barrier) \ SymI_HasProto(load_load_barrier) \ SymI_HasProto(cas) \ + SymI_HasProto(_assertFail) \ RTS_USER_SIGNALS_SYMBOLS \ RTS_INTCHAR_SYMBOLS |