Memory Leak

Shawn Garbett <[email protected]>
Newsgroups gmane.comp.lang.haskell.hopengl
Message-ID <[email protected]>
I'm pulling my hair out fixing a memory leak in an OpenGL program.  
Don't know if this is related to OpenGL, but I've not gotten any  
takers from IRC. I know the exact line of code that's causing it.

I have a draw function as follows:

draw :: Int -> State -> IO ()
draw autoexit state = do
     clear [ ColorBuffer, DepthBuffer ]

     -- Configure camera and scaling
     loadIdentity
     setView state

     -- Render Cells and iterate
     c <- get $ cells state
     forM_ c (renderCell state)
     c' <- iter c
     -- ==== MEMORY LEAK LIKE A SIEVE HERE ON THIS NEXT LINE
     (cells state) $=! c'

     swapBuffers

-------------

The state is defined as follows:

data State = State {
   frames     :: IORef Int,
   t0         :: IORef Int,
   eyex       :: IORef GLdouble,
   eyey       :: IORef GLdouble,
   eyez       :: IORef GLdouble,
   sphereList :: DisplayList,
   cells      :: IORef Population
}

And the iter function type is as follows:
iter :: Population -> IO Population

The only reason the IO is required is there is a random component and  
I'm using the random number generator in the IO space. If I comment  
out the one line mentioned above, there is no memory leak. The only  
other references to the cells is in the initialization which creates  
the first batch.

garbett:levy-gen garbetsp$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 6.10.1
cabal list output:
  * OpenGL
       Latest version available: 2.2.1.1
       Latest version installed: 2.2.1.1


It looks like the old data that's in the IORef is never freed. Why  
would this be occurring? Is there a compile flag that would fix this?  
How can I force the garbage collection to free that memory?

My alternative is to use C/C++, and I really really don't want to do  
that.

Shawn Garbett <shawn.p.garbett > at < vanderbilt.edu>
Vanderbilt Cancer Biology
220 Pierce Ave, PRB 715AA
Nashville, TN 37232
Office: 615.936.1975
Cell: 615.397.8737
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.