EventManager: Gracefully handle an initial 'Finished' state (#8235)
authorPatrick Palka <patrick@parcs.ath.cx>
Sun, 8 Sep 2013 16:22:01 +0000 (12:22 -0400)
committerAndreas Voellmy <andreas.voellmy@gmail.com>
Sun, 8 Sep 2013 18:34:25 +0000 (14:34 -0400)
Signed-off-by: Andreas Voellmy <andreas.voellmy@gmail.com>
libraries/base/GHC/Event/Manager.hs

index 8c8858b..5c87d0c 100644 (file)
@@ -248,6 +248,11 @@ loop mgr@EventManager{..} = do
     Created   -> go `onException` cleanup mgr
     Releasing -> go `onException` cleanup mgr
     Dying     -> cleanup mgr
+    -- While a poll loop is never forked when the event manager is in the
+    -- 'Finished' state, its state could read 'Finished' once the new thread
+    -- actually runs.  This is not an error, just an unfortunate race condition
+    -- in Thread.restartPollLoop.  See #8235
+    Finished  -> return ()
     _         -> do cleanup mgr
                     error $ "GHC.Event.Manager.loop: state is already " ++
                             show state