Ticket #5091: 0001-Add-GHC.Event.getSystemEventManager-IO-Maybe-EventMa.patch

File 0001-Add-GHC.Event.getSystemEventManager-IO-Maybe-EventMa.patch, 2.9 KB (added by basvandijk, 2 years ago)

git patch

  • GHC/Event.hs

    From 24d55bf5f1962bbbcfae3a8a2bbd75676250c4e1 Mon Sep 17 00:00:00 2001
    From: Bas van Dijk <v.dijk.bas@gmail.com>
    Date: Mon, 4 Apr 2011 20:22:09 +0200
    Subject: [PATCH] Add GHC.Event.getSystemEventManager :: IO (Maybe EventManager)
    
    ---
     GHC/Event.hs        |    2 ++
     GHC/Event/Thread.hs |   19 +++++++++++++------
     2 files changed, 15 insertions(+), 6 deletions(-)
    
    diff --git a/GHC/Event.hs b/GHC/Event.hs
    index 6bb975e..7920895 100644
    a b  
    88 
    99      -- * Creation 
    1010    , new 
     11    , getSystemEventManager 
    1112 
    1213      -- * Running 
    1314    , loop 
     
    3738    ) where 
    3839 
    3940import GHC.Event.Manager 
     41import GHC.Event.Thread (getSystemEventManager) 
  • GHC/Event/Thread.hs

    diff --git a/GHC/Event/Thread.hs b/GHC/Event/Thread.hs
    index dbfb14f..42bf541 100644
    a b  
    11{-# LANGUAGE BangPatterns, ForeignFunctionInterface, NoImplicitPrelude #-} 
    22 
    33module GHC.Event.Thread 
    4     ( 
    5       ensureIOManagerIsRunning 
     4    ( getSystemEventManager 
     5    , ensureIOManagerIsRunning 
    66    , threadWaitRead 
    77    , threadWaitWrite 
    88    , closeFdWith 
     
    3636-- run /earlier/ than specified. 
    3737threadDelay :: Int -> IO () 
    3838threadDelay usecs = mask_ $ do 
    39   Just mgr <- readIORef eventManager 
     39  Just mgr <- getSystemEventManager 
    4040  m <- newEmptyMVar 
    4141  reg <- registerTimeout mgr usecs (putMVar m ()) 
    4242  takeMVar m `onException` M.unregisterTimeout mgr reg 
     
    4747registerDelay :: Int -> IO (TVar Bool) 
    4848registerDelay usecs = do 
    4949  t <- atomically $ newTVar False 
    50   Just mgr <- readIORef eventManager 
     50  Just mgr <- getSystemEventManager 
    5151  _ <- registerTimeout mgr usecs . atomically $ writeTVar t True 
    5252  return t 
    5353 
     
    8080            -> Fd                   -- ^ File descriptor to close. 
    8181            -> IO () 
    8282closeFdWith close fd = do 
    83   Just mgr <- readIORef eventManager 
     83  Just mgr <- getSystemEventManager 
    8484  M.closeFd mgr close fd 
    8585 
    8686threadWait :: Event -> Fd -> IO () 
    8787threadWait evt fd = mask_ $ do 
    8888  m <- newEmptyMVar 
    89   Just mgr <- readIORef eventManager 
     89  Just mgr <- getSystemEventManager 
    9090  reg <- registerFd mgr (\reg e -> unregisterFd_ mgr reg >> putMVar m e) fd evt 
    9191  evt' <- takeMVar m `onException` unregisterFd_ mgr reg 
    9292  if evt' `eventIs` evtClose 
    9393    then ioError $ errnoToIOError "threadWait" eBADF Nothing Nothing 
    9494    else return () 
    9595 
     96-- | Retrieve the system event manager. 
     97-- 
     98-- This function always returns 'Just' the system event manager when using the 
     99-- threaded RTS and 'Nothing' otherwise. 
     100getSystemEventManager :: IO (Maybe EventManager) 
     101getSystemEventManager = readIORef eventManager 
     102 
    96103foreign import ccall unsafe "getOrSetSystemEventThreadEventManagerStore" 
    97104    getOrSetSystemEventThreadEventManagerStore :: Ptr a -> IO (Ptr a) 
    98105