Jason Dagit wrote:
On Wed, Apr 14, 2010 at 3:13 PM, Daniel Fischer <daniel.is.fisc...@web.de <mailto:daniel.is.fisc...@web.de>> wrote:

    Am Mittwoch 14 April 2010 23:49:43 schrieb Jason Dagit:
    > > It will be interesting to hear what fixes this!
    > >
    > >
    > > forever' m = do _ <- m
    > >                 forever' m
    >
    > When I define that version of forever, the space leak goes away.

    Not with optimisations.


Thanks for pointing that out.  I forgot to say so in my email.

Here are two reduced versions of the original program:

<snip>

I find non-termination with a much simpler program than yours (GHC 6.12.1):

\begin{code}{-# OPTIONS -O1 #-}

import Control.Concurrent
import Control.Monad (forever)

main = do
  putStrLn "Main thread starting"
  forkIO $ do putStrLn "Started thread"
              forever $ return ()
  putStrLn "Delaying"
  threadDelay (1 * 1000000)
  putStrLn "Delayed"
\end{code}

If I compile that with "ghc --make -threaded" and run it, with -O1 or -O2, it burns CPU and never terminates. With -O0 it terminates. So looks like some optimisation is causing the problem.

I might guess it's something to do with the RTS and threadDelay that's causing the problem. "Delayed" is never printed on my system, so it seems like (even when run with +RTS -N2) the original thread is not ever being rescheduled; perhaps the timeout queue isn't checked properly when a thread is burning up the CPU like that, and optimisations are on?

Thanks,

Neil.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to