Skip to content
  • AndreasVoellmy's avatar
    Fix #10017 · 92c93544
    AndreasVoellmy authored
    Summary:
    In the threaded RTS, a signal is delivered from the RTS to Haskell
    user code by writing to file that one of the IO managers watches (via
    an instance of GHC.Event.Control.Control). When the IO manager
    receives the signal, it calls GHC.Conc.Signal.runHandlers to invoke
    Haskell signal handler. In the move from a single IO manager to one IO
    manager per capability, the behavior was (wrongly) extended so that a
    signal is delivered to every event manager (see #9423), each of which
    invoke Haskell signal handlers, leading to multiple invocations of
    Haskell signal handlers for a single signal. This change fixes this
    problem by having the RTS (in generic_handler()) notify only the
    Control instance used by the TimerManager, rather than all the
    per-capability IO managers.
    
    Reviewers: austin, hvr, simonmar, Mikolaj
    
    Reviewed By: simonmar, Mikolaj
    
    Subscribers: thomie
    
    Differential Revision: https://phabricator.haskell.org/D641
    92c93544