[GHC] #10840: Periodic alarm signals can cause a retry loop to get stuck
GHC
ghc-devs at haskell.org
Fri Sep 4 07:50:00 UTC 2015
#10840: Periodic alarm signals can cause a retry loop to get stuck
-------------------------------------+-------------------------------------
Reporter: Rufflewind | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.10.2
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Revisions: |
-------------------------------------+-------------------------------------
The [https://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Signals periodic
alarm signals emitted by the GHC RTS] can
[https://github.com/haskell/directory/issues/35 hang the program under
certain circumstances]. In particular, any retry-loop of the form
{{{#!c
while (interruptible_syscall() == FAILED && errno == EINTR);
}}}
can cause a hang if the syscall takes a long time and cannot be resumed,
as it will forced to restart from the beginning each time it gets
interrupted. If the syscall takes longer than the interval between
successive alarm signals, it will be stuck in this loop forever. This was
found to occur with `statfs64` (indirectly called by `realpath`) and
`open` on SSHFS on Mac OS X.
[https://mail.haskell.org/pipermail/ghc-devs/2015-September/009770.html
Using a safe foreign import seems to mitigate the issue], but
[https://mail.haskell.org/pipermail/ghc-devs/2015-September/009793.html
according to Simon Marlow this is probably an accident].
So far there seems to be no way to guarantee the suspension of signals
except through low-level tools like `pthread_setmask`.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10840>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list