#2087: On a PPC Mac OS X 10.4, the RTS reports "Memory leak detected" running a
program compiled with -debug -threaded -fhpc
----------------------------+-----------------------------------------------
Reporter: thorkilnaur | Owner:
Type: bug | Status: new
Priority: normal | Component: Runtime System
Version: 6.9 | Severity: normal
Keywords: | Testcase:
Architecture: powerpc | Os: MacOS X
----------------------------+-----------------------------------------------
On a PPC Mac OS X 10.4, the RTS reports "Memory leak detected" running a
program compiled with -debug, -threaded, and -fhpc. Here is a sample
session:
{{{
$ cat T1.hs
main = putStrLn "Memory leak?"
$ rm T1.o
$ /Users/thorkilnaur/tn/GHCDarcsRepository/ghc-HEAD-complete-for-pulling-
and-copying-20070713_1212/ghc/compiler/stage2/ghc-inplace T1.hs -o T1
-debug -threaded -fhpc
$ ./T1
Memory leak detected
gen 0 blocks : 2
gen 1 blocks : 1
nursery : 128
retainer : 0
arena blocks : 0
exec : 0
free : 119
total : 250
in system : 254
T1: internal error: ASSERTION FAILED: file sm/Storage.c, line 1179
(GHC version 6.9.20080203 for powerpc_apple_darwin)
Please report this as a GHC bug:
http://www.haskell.org/ghc/reportabug
$ ./T1
Memory leak?
$
}}}
Running the program usually fails the first time and succeeds on the
second and subsequent attempts. The GHC version used is the HEAD from
around 2008-Feb-03.
Similar behaviour has been observed for the test cases
{{{
ffi002(threaded1)
hpc001(threaded1)
hpc_fork(threaded1)
tough(threaded1)
}}}
for both the stable and head tnaur PPC OSX builders. The last three are
all hpc test cases that use the same set of flags (-debug -threaded -fhpc)
used in the above sample. ffi002 is different, it is an example of a C
program that sets up the GHC runtime environment and calls some Haskell
code. The ffi002 test case has been failing for a while
(c.f. http://haskell.org/pipermail/cvs-ghc/2007-June/036013.html).
The memory leak is detected by this code in {{{rts/sm/Storage.c}}}:
{{{
if (live_blocks + free_blocks != mblocks_allocated * BLOCKS_PER_MBLOCK)
{
debugBelch("Memory leak detected\n");
for (g = 0; g < RtsFlags.GcFlags.generations; g++) {
debugBelch(" gen %d blocks : %4lu\n", g, gen_blocks[g]);
}
debugBelch(" nursery : %4lu\n", nursery_blocks);
debugBelch(" retainer : %4lu\n", retainer_blocks);
debugBelch(" arena blocks : %4lu\n", arena_blocks);
debugBelch(" exec : %4lu\n", exec_blocks);
debugBelch(" free : %4lu\n", free_blocks);
debugBelch(" total : %4lu\n\n", live_blocks + free_blocks);
debugBelch(" in system : %4lu\n", mblocks_allocated *
BLOCKS_PER_MBLOCK);
ASSERT(0);
}
}}}
I have tried to move the printing of counters outside the condition and
got the following result:
{{{
$ rm T1.o
$ /Users/thorkilnaur/tn/GHCDarcsRepository/ghc-HEAD-complete-for-pulling-
and-copying-20070713_1212/ghc/compiler/stage2/ghc-inplace T1.hs -o T1
-debug -threaded -fhpc
$ ./T1
memInventory:
gen 0 blocks : 2
gen 1 blocks : 1
nursery : 128
retainer : 0
arena blocks : 0
exec : 0
free : 119
total : 250
in system : 254
Memory leak detected
T1: internal error: ASSERTION FAILED: file sm/Storage.c, line 1181
(GHC version 6.9.20080203 for powerpc_apple_darwin)
Please report this as a GHC bug:
http://www.haskell.org/ghc/reportabug
$ ./T1
Memory leak?
memInventory:
gen 0 blocks : 2
gen 1 blocks : 1
nursery : 128
retainer : 0
arena blocks : 0
exec : 0
free : 123
total : 254
in system : 254
memInventory:
gen 0 blocks : 4
gen 1 blocks : 4
nursery : 128
retainer : 0
arena blocks : 0
exec : 0
free : 118
total : 254
in system : 254
$
}}}
Suggestions for further lines of investigation are most welcome.
Best regards
Thorkil
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/2087>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs