summaryrefslogtreecommitdiff
path: root/rts/RtsSymbols.c
diff options
context:
space:
mode:
authorNiklas Hambüchen <mail@nh2.me>2017-11-23 13:17:24 -0500
committerBen Gamari <ben@smart-cactus.org>2017-11-24 11:36:55 -0500
commitf209e6672fe33235bd1d4c20c87894021cf3bbc8 (patch)
treec8ced3817f0649ca7ff005d4029e09418a530d57 /rts/RtsSymbols.c
parent99089fc9240c39726d5b2a50942fb693c48c2bcd (diff)
downloadhaskell-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/RtsSymbols.c')
-rw-r--r--rts/RtsSymbols.c1
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