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 /.circleci | |
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 '.circleci')
0 files changed, 0 insertions, 0 deletions