ghc-timers-0.1.0.0: Provides bindings to functions starting and stopping the RTS timers

Safe HaskellSafe
LanguageHaskell2010

GHC.Timers

Description

Stopping alarms is sometimes necessary when dealing with foreign code that need to run long-running blocking syscalls. This is the same problem described in https://ghc.haskell.org/trac/ghc/ticket/4074. To reliably stop alarms we use the RTS own functions, as to not be overrulen or overrule the RTS. See comment in rts/Timers.c:

This global counter is used to allow multiple threads to stop the timer temporarily with a stopTimer()/startTimer() pair. If timer_enabled == 0 timer is enabled timer_disabled == N, N > 0 timer is disabled by N threads When timer_enabled makes a transition to 0, we enable the timer, and when it makes a transition to non-0 we disable it.

Documentation