id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,os,architecture,failure,difficulty,testcase,blockedby,blocking,related
2087,"On a PPC Mac OS X 10.4, the RTS reports ""Memory leak detected"" running a program compiled with -debug -threaded -fhpc",thorkilnaur,igloo,"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
",merge,closed,normal,6.8.3,Runtime System,6.9,fixed,,,MacOS X,powerpc,,Unknown,,,,
