#4018: Concurrency space leak
---------------------------------+------------------------------------------
Reporter: simonpj | Owner:
Type: bug | Status: new
Priority: high | Milestone: 7.4.1
Component: Compiler | Version: 6.12.2
Keywords: | Os: Unknown/Multiple
Architecture: Unknown/Multiple | Failure: Runtime performance bug
Difficulty: Unknown | Testcase:
Blockedby: | Blocking:
Related: |
---------------------------------+------------------------------------------
Changes (by simonmar):
* priority: normal => high
* difficulty: => Unknown
* failure: None/Unknown => Runtime performance bug
Comment:
This seems to be fixed since 7.0. I presume it is arity analysis allowing
the definition of `forever` to be eta-expanded. For reference here is the
code, compile with 6.12.x and `-O -fno-state-hack` to illustrate the leak:
{{{
module Main (main) where
import Control.Concurrent
{-
always :: Monad m => m a -> m b
always a = a >> always a
-}
always :: Monad m => m a -> m b
always a = do
_ <- a
always a
spawner :: IO ()
spawner = always $ do
forkIO $ always (return ())
putStrLn "Delaying"
threadDelay 1000000
main :: IO ()
main = do
putStrLn "Spawning"
forkIO spawner
putStrLn "Delaying main"
threadDelay 4000000
}}}
We should add this as a test and close.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4018#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs