[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